Estoy creando múltiples tiendas persistentes en mi aplicación, pero estoy usando solo un coordinador de tienda persistente y un modelo de objetos administrados. Ahora mi pregunta es cuando llamo al método guardar en el contexto del objeto administrado, qué tienda persistente usará para guardar el objeto. Por lo tanto, quiero especificar la tienda persistente que se utilizará para guardar el objeto. Al mismo tiempo que recupero los objetos de la base de datos, quiero asegurarme de que mi consulta de búsqueda se ejecute en una tienda en particular para que solo obtenga objetos de esa tienda. ¿Alguna ayuda?Qué tienda persistente se usa de manera predeterminada en los datos principales en iPhone
Respuesta
La recuperación no debería ser un problema. La solicitud de búsqueda puede modificarse para buscar tiendas particulares utilizando el método setAffectedStores: en una NSFetchRequest.
Cuando está creando un objeto, puede asignar la entidad a un almacén particular utilizando el método assignObject: toPersisentStore: en NSManagedObjectContext.
cuanto a su pregunta, no es realmente un mecanismo por defecto que soy consciente de, y puede ser que sólo hay que establecer las tiendas afectadas a todas sus tiendas:
[request setAffectedStores:[NSArray arrayWithObjects:firstStore,secondStore,thirdStore, nil]];
Para asegurarse de que está buscando en todos los lugares correctos.
Creo que realmente desea utilizar un PSC para cada tienda. Esto hará que los problemas que describes desaparezcan y realmente no puedo entender por qué querrías tener solo un PSC.
creo que debería ser posible con un PSC. De lo contrario, la provisión de agregar múltiples tiendas en un PSC podría no estar allí. –
Pensé que el propósito de un PersistentStoreCoordinator era coordinar varias tiendas persistentes. A menos que tengan diferentes modelos de objetos gestionados. – daver
Puede usar configuraciones.
[PersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:nil error:]
decir que quiere tener contexto único objeto gestionado, modelo de objeto administrado solo, solo coordinador almacén persistente, pero dos tiendas persistentes, por ejemplo, primero se tienda de SQLite y segunda será una tienda en memoria.
Para esta configuración, crea dos configuraciones, "SQLiteStore" para la tienda SQLite e "InMemoryStore" para la tienda en memoria. En XCode (abrir su archivo .xcdatamodel):
que vea lista de configuraciones disponibles de su modelo de objeto gestionado. La configuración del modelo de objetos gestionados es básicamente un conjunto de descripciones de entidades asociadas con un nombre de cadena. Para agregar configuración use Editor -> Agregue el elemento del menú principal Configuration mientras tiene abierto el archivo .xcdatamodel, luego escriba un nombre de cadena que prefiera. Arrastre las entidades que desea almacenar en el primer almacén de SQLite a la configuración de "SQLiteStore" y otras a la configuración de "InMemoryStore".
Ok, eso es todo, ahora es el momento de actualizar su código. Vaya al ámbito, donde crea un coordinador de tienda persistente y agrega tiendas persistentes. El único cambio es la especificación de configuración para ellos:
...
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:yourManagedObjectModel];
NSURL storeURL = … // your store url
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"SQLiteStore" URL:storeURL options:nil error:&error])
{
NSLog(@"[Core Data error] Unresolved error %@, %@", error, [error userInfo]);
abort();
}
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:@"InMemoryStore" URL:nil options:nil error:&error])
{
NSLog(@"[Core Data error] Unresolved error %@, %@", error, [error userInfo]);
abort();
}
...
Eso es todo ahora, todas las entidades que ha arrastrado por la configuración "InMemoryStore" se guardarán automáticamente al almacén persistente en memoria y lo mismo pasa con "SQLiteStore". Tal vez tengas que volver a instalar tu aplicación en el dispositivo/simulador después de eso.
Y una hoja de vida rápida:
- crear configuraciones en editor del modelo de objeto administrado (.archivo xcdatamodel);
- En el código, agregue varias tiendas persistentes al coordinador de tienda persistente, proporcionando el nombre de configuración apropiado.
Comprobar este enlace para más información: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdBasics.html#//apple_ref/doc/uid/TP40001650-SW4
- 1. ¿Es una tienda persistente un requisito para los datos centrales en el iPhone?
- 2. iPhone - dividiendo los datos principales en secciones con NSFetchResultsController
- 3. Datos principales en Android
- 4. Datos principales de iPhone insertando objetos nuevos
- 5. Cómo eliminar una tienda persistente de datos centrales
- 6. Datos principales con almacenamiento en memoria
- 7. ¿De qué manera se almacenan los datos en * .npy?
- 8. iPhone y datos principales: ¿se ha eliminado NSManagedObject?
- 9. ¿Qué versión de GLSL se usa en el iPhone (s)?
- 10. iPhone - Agregar datos principales al proyecto existente?
- 11. Datos principales: Copia de seguridad en Google App Engine (iPhone)
- 12. ¿Cómo elimino todos los objetos de mi tienda persistente en Core Data?
- 13. ¿Por qué se usa NSUserDefaults en iOS?
- 14. datos principales en una biblioteca estática para el iPhone
- 15. Clave primaria de datos principales
- 16. VS.NET se establece de manera predeterminada en la clase privada
- 17. ¿Qué estructura de datos se usa ampliamente en C?
- 18. Migración a través de varias versiones en los datos principales
- 19. Persistente vs no persistente - ¿Qué debería usar?
- 20. PHP - Redis/Memcachedb/Mongodb u otro almacenamiento persistente en el contador de la tienda
- 21. Datos principales con MagicalRecord no guardan en iCloud
- 22. ¿Cómo puedo hacer que mi sitio web se aleje de manera predeterminada en los teléfonos móviles?
- 23. Mostrar todos los archivos de manera predeterminada
- 24. Mantenimiento de datos principales en futuras versiones de aplicaciones
- 25. ¿Cómo puedo anular los indicadores del compilador (gcc) que usa setup.py de manera predeterminada?
- 26. ¿Por qué NFS usa UDP de forma predeterminada?
- 27. ¿NSFetchedResultsController observa todos los cambios en la tienda permanente?
- 28. Datos principales: ¿Query ID de objeto en un predicado?
- 29. Agregar datos principales a una aplicación de iPhone existente
- 30. ¿Dónde se establecen las reglas de relación en los datos principales en xcode 4?
Hola, me encuentro en una situación similar a la descrita por OP. Estoy usando MagicalRecord y tengo un modelo de objetos, un 'NSPersistentStoreCoordinator', un' NSManagedObjectContext' que es el predeterminado y 2 SQLite 'NSPersistentStore's. Uno de ellos actúa como una tienda permanente y el otro como una tienda temporal. Dentro de la aplicación llené esta tienda temporal. Pero obtengo 0 resultados. Publiqué un problema en MagicalRecord [Github] (https://github.com/magicalpanda/MagicalRecord/issues/976#issuecomment-77516462). ¿Podría echar un vistazo? – Isuru