我使用RestKit从我的RoR服务中抓取对象并使用CoreData来保存一些对象(更多静态类型的查找表对象)。 TasteTag是那些持久对象之一:Restkit加载的嵌套核心数据实体导致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 ..
我从RoR的服务器回来的数据,并预期它变得映射为对象。
"<TasteTag: 0x6e87170> (entity: TasteTag; id: 0x6e85d60 <x-coredata://03E4A20A-21F2-4A2D-92B4-C4424893D559/TasteTag/p5> ; data: <fault>)"
的问题是,当我试图对故障不能似乎是火的对象访问属性:核心数据实体RestKit收到请求后背部也似乎映射的罚款。起初我只是打电话的特性,它总是回来为无(尽管这应该火故障):
for (TasteTag *tag in self.vintage.tasteTags) {
[tagNames addObject:tag.name]; //get error of trying to add nil to array
}
寻找到手动触发故障(http://www.mlsite.net/blog/?p=518)我打过电话[tag willAccessValueForKey:nil]
导致后:
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>''
根据关键字(TasteTag/p5)查找.sqlite中的实体确实将它映射到我期望的那个。
与RestKit相关的其他职位建议禁用对象缓存(我没有使用),因为这通常是由一个实体被删除引起的。但在这个阶段,我只是在阅读,而不是删除,而且我没有缓存。
如果我只是打电话[TasteTag allObjects]
我能够得到所有的对象回来罚款,他们加载没有问题。只是在他们似乎错误的情况下。
希望你找到解决方案,我遇到了几乎相同的问题。 – 2012-01-13 07:14:26
@ryan如果你发现任何东西让我知道,到目前为止我没有运气 – Parrots 2012-01-13 19:54:43
@ryan - 看起来像它可能不是RestKit特定的。后续问题在这里:http://stackoverflow.com/questions/8856867/copying-objects-with-core-data-objects-in-them – Parrots 2012-01-13 20:38:46