Lucrul cu iCloud integrarea datelor de bază

Păstrarea sincronizării datelor aplicațiilor pe toate dispozitivele este o sarcină complexă și descurajantă. Din fericire, acesta este exact motivul pentru care Apple a construit iCloud. În această serie Tuts + Premium, veți afla cum funcționează iCloud și modul în care aplicațiile dvs. pot partaja cu ușurință datele pe mai multe dispozitive.


Disponibile și în această serie:

  1. Lucrul cu iCloud: Introducere
  2. Lucrul cu iCloud: stocare cheie-valoare
  3. Lucrul cu iCloud: Stocarea documentelor
  4. Lucrul cu iCloud: integrarea datelor de bază

În tranșele anterioare din această serie, am reconfacturat aplicația noastră de eșantionare pentru a comuta de la stocarea cheie iCloud Key-Value la iCloud Document Storage. Stocarea documentelor iCloud este mult mai flexibilă decât stocarea cheie-valoare și, prin urmare, mai potrivită pentru aplicațiile grele de date. Core Data este un cadru de persistență construit pentru aplicații care gestionează cantități mari de date și modele complexe de date. De-a lungul anilor, Core Data și-a câștigat dungile și este cunoscut ca un cadru fiabil și flexibil pentru persistența datelor. Această serie nu ar fi completă fără a discuta Core Data și integrarea sa cu iCloud.


Tipurile principale de aplicații de date

În ceea ce privește datele de bază, există două tipuri de aplicații, (1) aplicații bazate pe documente și (2) aplicații în bibliotecă. Aplicațiile bazate pe documente, cum ar fi aplicația Pages of Apple, gestionează documentele susținute de un magazin de date de bază. Aplicațiile în stilul bibliotecii, cum ar fi aplicația muzicală încorporată a iPhone-ului, utilizează un singur magazin persistent care este utilizat în întreaga aplicație.

În acest tutorial, voi discuta ambele tipuri de aplicații și voi schița o prezentare generală a modului în care fiecare tip de aplicație se poate integra cu iCloud. Datele de bază reprezintă un subiect foarte larg și unul dintre aspectele mai avansate ale dezvoltării Mac și iOS. Acest tutorial va zgâria doar suprafața a ceea ce este posibil și opțiunile de integrare disponibile cu iCloud.


Aplicații bazate pe documente

UIManagedDocument

UIManagedDocument este o subclasă concretă de UIDocument și este adaptat pentru a satisface nevoile aplicațiilor bazate pe date bazate pe documente. Pentru aplicațiile bazate pe documente, UIManagedDocument oferă cele mai bune din cele două lumi, (1) UIDocument(2) suport de date încorporat. Este demn de menționat acest lucru UIManagedDocument pot fi utilizate chiar dacă nu este nevoie de integrarea iCloud. Chiar dacă UIManagedDocument este adesea menționată în contextul "iCloud", este util să se ia o clipă și să se sublinieze beneficiile UIManagedDocument clasa însăși.

La fel ca superclajul său, UIDocument, UIManagedDocument face managementul documentelor ușor și simplu. Diferența cheie cu UIDocument este asta UIManagedDocument se adresează în mod specific datelor de bază. Ambii UIDocument și UIManagedDocument au multe de oferit din cutie. Rețineți din tutorialul anterior că UIDocument oferă funcții de salvare automată și operațiile de încărcare și de salvare sunt tratate pe o coadă de fundal, în timp ce se abstracționează detaliile zgomotoase. Dacă decideți să utilizați datele de bază într-o aplicație bazată pe documente, se recomandă utilizarea acestora UIManagedDocument chiar dacă iCloud nu se află pe lista de caracteristici a aplicației dvs..

Înainte de introducerea UIManagedDocument, setul de date de bază a fost configurat și configurat în mod tradițional în delegatul aplicației. Acest lucru nu mai este necesar atunci când îl utilizați UIManagedDocument. Una dintre frumusețile lui UIManagedDocument clasa este încorporată în stiva de date de bază. După inițializarea unei instanțe din UIManagedDocument, este disponibil un stiva complet de date de bază. UIManagedDocumentinterfața expune un context de obiecte gestionate, precum și coordonatorul de magazin persistent și modelul de obiect gestionat. Configurarea coordonatorului de stocare persistentă este la fel de ușor ca și furnizarea unui dicționar cu opțiuni la fel ca și când faci inițializarea manuală a unui coordonator de magazin persistent.

După cum sugerează și numele, UIManagedDocument este o subclasă concretă de UIDocument, ceea ce înseamnă că poate fi folosit ca atare, fără a fi nevoie de subclasă UIDocument. În spatele scenelor, UIManagedDocument agregă automat modelele de obiecte gestionate pe care le găsește în pachetul de aplicații și pregătește o stivă de date de bază cu care să lucrați. Dacă cererea dvs. are cerințe mai complexe, atunci depinde de subclasa UIManagedDocument pentru a îndeplini aceste cerințe.

Usor de folosit

Oricine este familiarizat cu datele de bază știe că schimbările se angajează la stocarea persistentă prin trimiterea contextului obiect gestionat a Salvați: mesaj. Acest lucru nu mai este necesar atunci când îl utilizați UIManagedDocument. Nu numai că acest lucru nu este necesar, ci trebuie evitat. Motivul este că, sub capotă, UIManagedDocument gestionează un context de obiecte private gestionate. Acest context privat gestionat obiect gestionează un context de obiecte gestionate copil, care este expus contextul de obiecte gestionate UIManagedDocumentinterfata publica. Prin trimiterea contextului obiect gestionat copil a Salvați: mesaj, modificările se angajează numai în contextul obiect gestionat părinte și nu în magazinul persistent care este gestionat de contextul obiect gestionat părinte.

Pe scurt, ar trebui să utilizați familia UIDocument metode pentru a salva modificările la magazinul persistent, restul este îngrijit în spatele scenei. Există un motiv pentru asta UIManagedDocument moștenește de la UIDocument!


Aplicații bazate pe bibliotecă

Aplicațiile bazate pe bibliotecă, cum ar fi aplicațiile de muzică și fotografii încorporate de iPhone, gestionează, de obicei, o stivă de date core cu un singur coordonator permanent de magazin și un magazin persistent.


Sub capotă

S-ar putea să te întrebi cum funcționează Core Data cu iCloud sub capotă. Acest lucru depinde de tipul de magazin pe care îl utilizați, adică (1) un SQLite sau (2) un magazin binar (atomic). În majoritatea cazurilor de utilizare, se recomandă opțiunea pentru SQLite. Cu toate acestea, dacă aveți de a face cu cantități mici de date atunci un magazin binar este o opțiune, de asemenea. În lumina lui iCloud, dezavantajul major al unui magazin binar este că fiecare schimbare duce la înlocuirea întregului magazin. Nu numai că acest lucru este ineficient, ci poate duce la implicații semnificative de performanță dacă magazinul crește în dimensiune. În restul discuțiilor, mă voi concentra pe SQLite ca magazin de suport.

Cu SQLite ca magazin de suport, avantajul major este acela că schimbările sunt propagate progresiv, în loc să înlocuiască întregul magazin cu fiecare schimbare angajată. Pentru a înțelege cum funcționează împreună datele core și iCloud, este important să știm că baza de date SQLite nu este stocată în iCloud. În schimb, fiecare schimbare este înregistrată în așa-numitele înregistrări de tranzacții iar acele jurnale sunt folosite pentru a propaga modificările de pe toate dispozitivele. Jurnalele de tranzacții sunt ușoare și duc la un proces de sincronizare cu granulație fină, rapidă și eficientă. Jurnalele de tranzacții sunt stocate într-un director din containerul iCloud. Locația exactă poate fi specificată prin setarea NSPersistentStoreUbiquitousContentURLKey tastați în dicționarul de opțiuni transmis coordonatorului permanent de magazin.

Un alt aspect vital al sincronizării este menținerea actualizării interfeței utilizator. Când se utilizează datele de bază, acest lucru poate fi realizat prin înregistrarea controlorilor corespunzători ca observator NSPersistentStoreDidImportUbiquitousContentChangesNotification notificări, care sunt trimise ori de câte ori o schimbare la distanță este propagată. Pe baza modificărilor, aplicația dvs. poate actualiza interfața cu utilizatorul pentru a reflecta modificările aduse memoriei sale locale persistente.


fuzionarea

Un alt avantaj cheie al datelor de bază este controlul granular pe care îl aveți asupra datelor dvs. și acest lucru este valabil mai ales în ceea ce privește datele fuzionate, o parte esențială a colaborării cu iCloud. Datorită acestei granularități, care este posibilă numai datorită utilizării jurnalelor de tranzacții, cea mai mare parte a fuziunii se face automat de către Core Data.


Gânduri închise

Firele comune din această serie au fost modul în care aplicațiile dvs. pot beneficia de iCloud și cum să se integreze cu iCloud. Vreau să închei această serie expunând câteva avertismente pe care ați putea dori să le urmăriți atunci când adăugați suportul iCloud unei aplicații. În cea de-a doua și a treia tranșă din această serie, ți-am arătat cum să folosești NSFileManager„s URLForUbiquityContainerIdentifier: pentru a obține o referință la un container specific iCloud pentru stocarea datelor în iCloud. În exemplele noastre, am presupus întotdeauna că iCloud a fost activat pe dispozitivele cu care am lucrat, dar
acest lucru nu va fi întotdeauna cazul. Prin urmare, este important să avem o soluție alternativă pentru situațiile în care iCloud nu este activat. Mai jos sunt două exemple pentru a ilustra mai bine aceste restricții.

Primul exemplu este atunci când un utilizator nu are un cont iCloud sau nu sa conectat cu contul iCloud pe dispozitiv. Aceasta înseamnă că aplicația dvs. nu poate accesa containerul iCloud pe care intenționează să îl stocheze. Ea devine și mai complexă atunci când permite iCloud după ce a folosit aplicația dvs. pentru câteva săptămâni. Utilizatorul va aștepta ca datele sale să fie sincronizate pe toate dispozitivele. Cu alte cuvinte, veți avea nevoie de o modalitate de a transfera datele din cutia de cerneală a aplicației în containerul iCloud.

Al doilea exemplu se concentrează pe persistența datelor. Ce se întâmplă când un utilizator a activat iCloud pe dispozitivul său, dar decide după câteva săptămâni să se conecteze cu un alt cont iCloud? Datele stocate în containerul iCloud nu mai sunt disponibile pentru utilizator, deoarece este utilizat un alt cont iCloud. Aceasta este o măsură de securitate pusă în aplicare de Apple. Datele sunt legate de un cont iCloud, nu de un dispozitiv. Prin urmare, datele nu sunt accesibile atunci când se utilizează un alt cont iCloud. Este rar că un utilizator are mai multe conturi iCloud, dar este important să fiți conștienți de această posibilitate și de consecințele pe care le poate avea.


Concluzie

Sper că această serie despre iCloud ți-a dat o idee bună despre ce este iCloud și ce poate face pentru tine ca dezvoltator. Ideea de bază din spatele iCloud este simplă și adoptarea iCloud este relativ ușoară dacă modelul de date al aplicației nu este prea complex. Cu toate acestea, această ultimă tranșă a arătat că integrarea iCloud poate deveni foarte complexă atunci când crește complexitatea modelului de date al aplicației.

Cod