Estoy utilizando RestKit para tomar objetos de mi servicio RoR y utilizando CoreData para conservar algunos de los objetos (más objetos de tabla de búsqueda de tipo estático). TasteTag es uno de esos objetos persistido:Entidades de datos centrales anidadas cargadas en repositorios causan NSObjectInaccessibleException
#ifdef RESTKIT_GENERATE_SEED_DB
NSString *seedDatabaseName = nil;
NSString *databaseName = RKDefaultSeedDatabaseFileName;
#else
NSString *seedDatabaseName = RKDefaultSeedDatabaseFileName;
NSString *databaseName = @"Model.sqlite";
#endif
RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:kServerURL];
manager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:databaseName usingSeedDatabaseName:seedDatabaseName managedObjectModel:nil delegate:self];
.. lots of fun object mapping ..
RKManagedObjectMapping* tasteTagMapping = [RKManagedObjectMapping mappingForClass:[TasteTag class]];
[tasteTagMapping mapKeyPath:@"id" toAttribute:@"tasteTagID"];
[tasteTagMapping mapKeyPath:@"name" toAttribute:@"name"];
tasteTagMapping.primaryKeyAttribute = @"tasteTagID";
[[RKObjectManager sharedManager].mappingProvider setMapping:tasteTagMapping forKeyPath:@"taste_tags"];
[[RKObjectManager sharedManager].mappingProvider addObjectMapping:tasteTagMapping];
.. some more mapping ..
tengo los datos que llegan desde el servidor RoR y es cada vez asignan a los objetos como se esperaba. La entidad de Datos Básicos también parece corresponder bien después RestKit recibe la petición de vuelta:
"<TasteTag: 0x6e87170> (entity: TasteTag; id: 0x6e85d60 <x-coredata://03E4A20A-21F2-4A2D-92B4-C4424893D559/TasteTag/p5> ; data: <fault>)"
El problema es cuando trato de acceder a las propiedades de los objetos de la falla parece que no puede haber fuego. Al principio me estaba llamando las propiedades, que siempre volvía como nula (a pesar de que disparará el fallo):
for (TasteTag *tag in self.vintage.tasteTags) {
[tagNames addObject:tag.name]; //get error of trying to add nil to array
}
Después de mirar en las fallas de activación manual (http://www.mlsite.net/blog/?p=518) intenté llamar [tag willAccessValueForKey:nil]
que se traduce en:
Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x6e7b060 <x-coredata://03E4A20A-21F2-4A2D-92B4-C4424893D559/TasteTag/p5>''
Al buscar la entidad en .sqlite en función de la clave (TasteTag/p5) se muestra asignada a la que yo esperaba.
Otras publicaciones relacionadas con RestKit recomiendan deshabilitar la caché de objetos (que no estoy usando) ya que esto generalmente es causado por una entidad que se está eliminando. Pero en esta etapa solo estoy leyendo, no borrando, y no tengo memoria caché en su lugar.
Si llamo al [TasteTag allObjects]
puedo recuperar todos los objetos y se cargan sin problemas. Es solo en el caso cuando parecen tener una falla.
Espero que encuentres una solución, estoy experimentando un problema casi idéntico. –
@ryan si encuentra algo hágamelo saber, hasta ahora no he tenido suerte – Parrots
@ryan - parece que no es específico de RestKit. Pregunta de seguimiento aquí: http://stackoverflow.com/questions/8856867/copying-objects-with-core-data-objects-in-them – Parrots