core data + i cloud

23
Core Data + iCloud Jorge D. Ortiz Fuentes (@jdortiz)

Upload: jorge-ortiz

Post on 04-Jun-2015

808 views

Category:

Technology


2 download

DESCRIPTION

Detalles de la aventura de implementar iCloud en una aplicación de iPhone.

TRANSCRIPT

Page 1: Core data + i cloud

Core Data + iCloudJorge D. Ortiz Fuentes

(@jdortiz)

Page 2: Core data + i cloud

Agenda★Mini intro a Core Data.

★Funcionamiento de iCloud.

★Integración con iCloud.

★Problemas de implementación.

2

Page 3: Core data + i cloud

Core Data

Page 4: Core data + i cloud

Mini intro a Core Data★ Core Data =

persistencia de objetos

★ Piezas fundamentales:

๏ Managed Object Model

๏ Persistent Store

๏ Persistent Store Coordinator

๏ Managed Object Context

๏ Managed Object

Page 5: Core data + i cloud

La foto de Core Data

PersistentStore

PersistentStore

Persistent Store Coordinator Managed Object

Model

Managed Object Context

MO MO MO MO MO

Page 6: Core data + i cloud

iCloud

Page 7: Core data + i cloud

Mini intro a iCloud★ Almacena tus datos y

los redistribuye a todos tus dispositivos.

๏ Independiente de la app.

★ Tres mecanismos

๏ Key-value store

๏ UIDocument / UIManagedDocument

๏ Core Data

Page 8: Core data + i cloud

Key-Value store★Almacenamiento tipo pList.

★Limitado a 64k.

★Sin conflictos = el último gana.

★Ideal para las preferencias comunes no críticas.

8

Page 9: Core data + i cloud

Documentos★ Contenedor ubicuo★ NSMetadataQuery para buscar y ver ★ Implementa NSFilePresenter y usa

NSFileCoordinator para coordinar.★ Conflictos resueltos a medida.★ Para documentos distintos

sincronizados individualmente.

9

Page 10: Core data + i cloud

La foto de iCloud

File 1

File 2

File i

File n

NSFilePresenter

NSFileCoordinator

Page 11: Core data + i cloud

Core Data★ Preparada para integrarse con

iCloud๏ SQLite persitent store (también

Atomic).

๏ Base de datos local.

๏ Sólo migraciones lightweight.

★ Para aplicaciones tipo biblioteca (“shoebox”)

11

Page 12: Core data + i cloud

La foto de iCloud

logs = cambios

NSPersistentStoreDidImportUbiquitousContentChangesNotification

Page 13: Core data + i cloud

La foto de iCloud

logs = cambios

NSPersistentStoreDidImportUbiquitousContentChangesNotification

File 1

File i

File n

NSFilePresenter

NSFileCoordinator

Page 14: Core data + i cloud

Core Data + iCloud

Page 15: Core data + i cloud

Core Data con iCloud★ Casi todo se mantiene igual.★ Cada persistent store se añade con las

opciones:‣ NSPersistentStoreUbiquitousContentURLKey

‣ NSPersistentStoreUbiquitousContentNameKey

★ Al añadir el persistent store ๏ Asíncronamente.

๏ Con sección crítica (lock/unlock).

★ Atender a la notificación:‣ NSPersistentStoreDidImportUbiquitousContentChangesNotification

15

Page 16: Core data + i cloud

Además del código★App ID con iCloud activado.

16

Page 17: Core data + i cloud

Además del código 2★Entitlements

17

TeamID implícito

Page 18: Core data + i cloud

El resto de ficheros★Los correspondientes view controllers implementan NSFilePresenter.

★Los ficheros se acceden y modifican con NSFileCoordinator.

18

Page 19: Core data + i cloud

Implementación

Page 20: Core data + i cloud

Inicio asíncrono★Al conectarse a Core Data la primera vez, puede haber datos ya enviados desde otros dispositivos.

★La creación del persistent store debe ser asíncrona (GCD es tu amigo).

20

Page 21: Core data + i cloud

Depuración★Sólo se puede probar en los dispositivos.

★Pero no es necesario 2 (al menos al principio).๏Se puede sincronizar con Mac OS

X.

21

Page 22: Core data + i cloud

Datos iniciales★ Sin iCloud: Persistent store

precreado en el bundle y copiado a NSDocumentDirectory (o Library).

★ Eso no funciona con iCloud porque sólo se transmiten los cambios al persistent store.

★ EXPERIMENTANDO CON:‣ migratePersistentStore:toURL:options:withType:error:

‣ NSMetadataQuery

22

Page 23: Core data + i cloud

¡Gracias!