watchOS 2: Bakgrunns Overganger og Queues

watchOS 2: Bakgrunn Overføringer og Køer
17
Del
7
Del

Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

Innledning

Se Tilkobling er en ny kommunikasjons rammeverk lansert sammen med iOS 9 og watchOS 2. Det viktigste formålet er å enkelt og sømløst overføre informasjon mellom en Apple Watch søknad og moder iOS søknad.

Rammeverket gir mange forskjellige funksjoner. For noen uker siden, Jorge Costa skrev om muligheten til å sende meldinger mellom en iOS og en Apple Watch søknad. I denne opplæringen vil vi zoome inn på overføring av data i bakgrunnen.

Muligheten til å sende meldinger er utviklet for data som er nødvendig umiddelbart etter den andre enheten. I kontrast, bakgrunn overføringer er best egnet for større biter av data som ikke er nødvendig umiddelbart av motparten. Et unntak fra dette er med komplikasjon informasjon, som vi vil diskutere senere i denne opplæringen.

Forutsetninger

Denne opplæringen forutsetter at du kjører Xcode 7 på OS X 10.10 eller senere. Du må også laste ned starter prosjektet fra GitHub.

1. Work Setup

For å kunne bruke Watch Connectivity rammeverk, både iOS og watchOS app må ha en klasse som er i samsvar med WCSessionDelegate protokollen og at riktig konfigurerer standard WCSession. Metodene for den WCSessionDelegate protokollen håndtere mottak av alle data via Watch Connectivity rammeverket og gir deg muligheten til å ta kontroll over de nye dataene i søknaden din.

Åpne starter prosjektet i Xcode og redigere AppDelegate.swift. På toppen legger du til følgende import uttalelse:
importere WatchConnectivity

Deretter oppdatere klassen definisjonen av AppDelegate klassen for å gjøre det i samsvar med den WCSessionDelegate protokollen
klasse AppDelegate. UIResponder, UIApplicationDelegate, WCSessionDelegate {< p> Vi erklærer også en egenskap av type WCSession! i AppDelegate klassen til å lagre en referanse til standard WCSession objektet
Var sesjon. WCSession

Til slutt oppdatere programmet (_: didFinishLaunchingWithOptions :) metode som vist nedenfor
func program (søknad. UIApplication , didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) - > Bool {session = WCSession.defaultSession () session.delegate = selv hvis WCSession.isSupported () {session.activateSession ()} return true}

I søknaden (_: didFinishLaunchingWithOptions :), får vi en referanse til standard WCSession objekt, sette økten er delegat til appens AppDelegate eksempel og, hvis dette støttes, aktivere økten. Den isSupported klassemetode sjekker for å se om motparten watchOS app for iOS-app er installert på en sammenkoblet Apple Watch og er i stand til å sende data.

Oppsettet for watchOS side er svært like. Åpne ExtensionDelegate.swift og erstatte innholdet med følgende:
import WatchKitimport WatchConnectivityclass ExtensionDelegate: NSObject, WKExtensionDelegate, WCSessionDelegate {var økt: WCSession! func applicationDidFinishLaunching () {session = WCSession.defaultSession () session.delegate = selv session.activateSession ()} func applicationDidBecomeActive () {} func applicationWillResignActive () {}}

Du vil merke at vi ikke kaller isSupported på den WCSession klassen før du aktiverer økten. Dette er fordi denne metoden alltid returnerer true på watchOS side.

For å sjekke at alt fungerer som det skal, kjøre Apple Watch app på hver av de to simulatorer som vist nedenfor.

Neste, kjøre iOS-app på samme iPhone simulator typen du valgte når du kjører klokken app.

Når iOS-app har lansert, Apple Watch simulator bør bare gå tilbake til urskiven som vist i skjermbildet under.

2. Sende data

Med standard WCSession objekt konfigurert riktig, er det på tide for oss å sende noen data mellom iOS og Apple Watch søknaden.

Åpne TableViewController.swift og legg til følgende linje med kode på slutten av createNewItem (_ :) metode.
WCSession.defaultSession () transferUserInfo (post)

transferUserInfo (_ :) metoden kan brukes med en ordliste som sin eneste parameter. Når denne metoden har blitt kalt, blir brukeren info ordboken du oppga lagt til køen av informasjon som skal overføres.

Både iOS og watchOS arbeid i forbindelse med hverandre for å overføre informasjonen på et beleilig tidspunkt. Den kombinerte systemet ser på ting som app bruk, batterilevetid, om ikke den andre enheten brukes for øyeblikket, etc. Når systemet har overført opplysningene, programmet på den andre enheten vil utføre en delegat tilbakeringing metode neste gang det er lansert.

Nå er det tid for oss å gjennomføre mottakssiden på Apple Watch. Åpne ExtensionDelegate.swift og legge til følgende metode til ExtensionDelegate Klasse:
func session (sesjon: WCSession, didReceiveUserInfo Userinfo: [String: AnyObject]) {dispatch_async (dispatch_get_main_queue ()) {() - > Ugyldig inn hvis la varer = NSUserDefaults.standardUserDefaults (). ObjectForKey ("elementer") som? [NSDictionary] {var newItems = elementer newItems.append (Userinfo) NSUserDefaults.standardUserDefaults () setObject (newItems som AnyObject, Forkey: "varer").}. Else {NSUserDefaults.standardUserDefaults () setObject ([userinfo] som AnyObject, Forkey : "elementer")}}}

Denne metoden vil bli oppringt så snart vi kjøre Apple Watch programmet og når informasjonen er overført hell

Legg merke til at mens denne opplæringen bare viser et eksempel. overføre informasjon fra iOS til watchOS, de WCSession og WCSessionDelegate metoder oppfører seg akkurat det samme på begge plattformer for bakgrunnen overføringer.

Med denne koden implementert, kjøre Apple Watch app i simulatoren. Deretter kjører iPhone app igjen og trykk på knappen for å opprette et nytt element.

Nå gå tilbake til Apple Watch simulator og trykk Kommando-Skift-H to ganger for å gå tilbake til den nyeste app. Du vil se at varen du nettopp opprettet dukker opp på Apple Watch.

Legg merke til at, mens informasjonsoverføring skjedde umiddelbart mellom simulatorer, i en reell situasjon med fysiske enheter dette vil ikke alltid være case.

3. Tilgang til Venter Transfer Queue

Med iOS-app fortsatt kjører, avslutter Apple Watch simulator fra menylinjen eller ved å trykke på Kommando-Q. Etter å ha gjort dette, trykker du på knappen på iOS-app for å lage noen flere elementer som vist nedenfor.

Når du forsøker å overføre informasjon ved hjelp av Watch Connectivity rammeverket, er det lagt til en kø som er gradvis fjernet som informasjon overføres. Denne køen kan nås og kan nås også overføringer i køen.

Dette er nyttig, fordi du kan se hvor mange elementer er fortsatt til vurdering, og du kan til og med avbryte spesifikke overføringer hvis du må. Elementene du nettopp opprettet blir holdt for tiden i bruks info køen fordi Apple Watch er i dag koblet fra overordnede enheten, noe som gjør en overføring umulig.

Åpne AppDelegate.swift og legge til følgende kode på slutten av applikasjons (_: didFinishLaunchingWithOptions :):
la overføringer = session.outstandingUserInfoTransfersif transfers.count > 0 {la transfer = transfers.first! transfer.cancel ()}

Med denne koden, vi få tilgang til de utestående bruker info overføringer, og hvis det er minst én, avbryte den første overføringen. Den WCSessionUserInfoTransfer gjenstander returnert fra outstandingUserInfoTransfers eiendommen har også to beskyttede egenskaper som du kan bruke:

Userinfo:. Denne eiendommen butikker ordlisten du overfører

overføre: Denne eiendommen lagrer en boolsk verdi og indikerer om brukeren info blir nå overført.

Det er ikke mye av funksjonaliteten tilgjengelig med fremragende informasjonsoverføringer i Watch Connectivity rammeverket, men avhengig av søknaden din, noen av disse funksjonene kan være svært nyttig.

4. Andre overføringsmetoder

I denne opplæringen, vi har bare dekket brukerinfo bakgrunn overføringer, men er det noen andre måter å overføre data mellom enheter. Hver av disse metodene er designet for et bestemt formål ved kommunikasjon mellom en iPhone og en Apple Watch.

Application Context

Det er der du trenger å overføre informasjon mellom enheter hvor bare den aller siste informasjonen er relevant. Du overfører én ordbok ved å ringe updateApplicationContext (_: error :) metoden. Feilen parameter i denne metoden er en peker til et NSError objekt, som vil bli fylt med informasjon hvis det oppstår et problem med overføring

På mottakersiden kan du gjennomføre økten (_:. DidReceiveApplicationContext :) metode eller, alternativt, tilgang til programmet sammenheng via standard WCSession objektets receivedApplicationContext eiendom.

komplikasjon Informasjon

Det er der du trenger å overføre en enkelt bruker info ordboken spesielt for din app tilpassede komplikasjon. Du kan bare sende informasjon fra iOS side, og dette er gjort med transferCurrentComplicationUserInfo (_ :) metoden.

Den største forskjellen mellom denne og transferUserInfo (_ :) metoden brukt tidligere i denne opplæringen er at når oppdatere en komplikasjon, vil systemet alltid forsøke å overføre informasjonen umiddelbart.

Vær oppmerksom på at en overføring ikke er garantert som enhetene kan kobles fra eller komplikasjon kan ha overskredet sin bakgrunn gjennomføring budsjett. Hvis en komplikasjon informasjonsoverføring ikke kan fullføres det legges til outstandingUserInfoTransfers køen der det kan sees og kansellert hvis det er nødvendig.

også oppmerksom på at hvis en komplikasjon info overføringen er i køen, og du kaller transferCurrentComplicationUserInfo (_ :) metoden igjen, den eksisterende overførings i køen vil være ugyldig og kansellert.

Filer

Du kan også bruke Watch Connectivity rammeverk for å overføre filer mellom enheter. Dette gjøres via transferFile (_:. Metadata :) metode der den første parameteren er en lokal NSURL til filen, og den andre er en valgfri ordbok, som inneholder noen ekstra data knyttet til denne filen

Som du ville forvente, mottar av denne filen behandles ved en fremgangsmåte av den WCSessionDelegate protokollen, sesjonen (_: i didReceiveFile :) metode være nøyaktig. I denne metoden, får du et enkelt WCSessionFile objekt som inneholder en ny lokal URL til selve filen samt metadata du overførte.

Som med bruker info overføringer, kan du også vise ventende eller filoverføringer som er i gang via standard WCSession objektets outstandingFileTransfers eiendom.

Konklusjon

Totalt Watch Connectivity rammeverket gir en svært enkel og brukervennlig grensesnitt for å overføre data mellom en tilkoblet iPhone og Apple Watch . Rammeverket muliggjør overføring av bruker info, program sammenheng, og komplikasjon info ordbøker samt filer.

Du skal nå være komfortabel med både sending og mottak av informasjon ved hjelp av Watch Connectivity rammeverket samt hvordan du kan samhandle med eventuelle utestående overføringer.

Som alltid må du huske å legge inn kommentarer og tilbakemeldinger i kommentarfeltet nedenfor.



Previous:
Next Page: