ios 12 descargar
Cómo acceder al modelo CoreData en la extensión de hoy(iOS) (1)
Lo que realmente desea es acceder a su tienda persistente (muy probablemente una base de datos SQLite). Para lograr eso, debe configurar grupos de aplicaciones y asegurarse de que su aplicación de host configure la pila de datos centrales utilizando su contenedor compartido (para que su tienda también esté accesible en extensión). Algo como:
NSString *containerPath = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:YOUR_SECURITY_APP_GROUP].path;
NSString *sqlitePath = [NSString stringWithFormat:@"%@/%@", containerPath, @"database.sqlite"];
Luego, en su extensión, simplemente cree un coordinador de tienda persistente con contextos de objetos gestionados usando la base de datos en contenedor compartido. Puede compartir su modelo (.momd) y las subclases de objetos administrados con extensión simplemente asegurándose de que estén incluidos en el objetivo de extensión también.
Editar:
Para agregar su modelo y las subclases de objetos gestionados:
Asegúrate de tener tus objetivos de aplicación y extensión
Haga clic en su archivo de modelo y seleccione ambos objetivos en ''Membresía de destino'' en el panel derecho
- Repita lo mismo con todas las subclases de objetos gestionados
¿Es posible trabajar con mi modelo CoreData en la extensión actual de forma rápida como en la aplicación original? En caso afirmativo, ¿cómo puedo crear NSManagedObjectContext?
Realmente no tengo ni idea, al lado del identificador de grupo, pero desafortunadamente no sé cómo obtener el contexto ...
En el pasado, creé aplicaciones con el cheque al principio que quería usar CoreData y luego recibí el managedObjectContext a través de mi AppDelegate ... Pero, ¿cómo puedo hacer algo así en una extensión? Apple no ofrece información sobre eso ...
Edité esta línea en AppDelegate:
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"HTWcampus.sqlite"];
a esto (después de incluir el grupo a ambos objetivos):
NSURL *storeURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.BenchR.TodayExtensionSharingDefaults"];
storeURL = [storeURL URLByAppendingPathComponent:@"HTWcampus.sqlite"];
NSLog(@"StoreURL2: %@", storeURL);
Con eso la base de datos existente en mi aplicación se fue (lo que es genial, porque creo que funcionó poner la base de datos en el segmento compartido).
Pero, ¿cómo puedo crear una instancia de mi contexto en la extensión? ¿Y cómo puedo acceder a mi NSManagedObject-subclasses?
En la extensión tengo este código hasta ahora:
var context: NSManagedObjectContext!
override func viewDidLoad() {
super.viewDidLoad()
var storeURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.BenchR.TodayExtensionSharingDefaults")
storeURL = storeURL?.URLByAppendingPathComponent("HTWcampus.sqlite")
let modelURL = NSBundle.mainBundle().URLForResource("HTWcampus", withExtension: "momd")
let model = NSManagedObjectModel(contentsOfURL: modelURL)
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: model)
coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: nil, error: nil)
context = NSManagedObjectContext()
context.persistentStoreCoordinator = coordinator
}
¿Es esto correcto? Y si es así, ¿cómo puedo obtener mi NSManagedObject-Subclasses allí? ¿Y tengo que agregar el archivo momd al objetivo de extensiones? Si es así, ¿cómo puedo hacer eso?