【发布时间】:2012-02-08 22:20:46
【问题描述】:
我正在使用 RestKit 从我的 RoR 服务中获取对象,并使用 CoreData 来保存一些对象(更多静态类型的查找表对象)。 TasteTag 是这些持久对象之一:
#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 服务器返回的数据,它按预期映射到对象。在 RestKit 收到请求后,Core Data 实体似乎也映射得很好:
"<TasteTag: 0x6e87170> (entity: TasteTag; id: 0x6e85d60 <x-coredata://03E4A20A-21F2-4A2D-92B4-C4424893D559/TasteTag/p5> ; data: <fault>)"
问题是当我尝试访问对象的属性时,故障似乎不会被触发。起初我只是调用属性,它总是返回为零(即使这应该引发错误):
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],我可以让所有对象恢复正常,并且它们可以毫无问题地加载。似乎只是在他们犯错的情况下。
【问题讨论】:
-
希望您找到解决方案,我遇到了几乎相同的问题。
-
@ryan 如果你有任何发现请告诉我,到目前为止我还没有运气
-
@ryan - 看起来它可能不是 RestKit 特定的。后续问题:stackoverflow.com/questions/8856867/…
-
我找到了适合我的解决方案。我试图在下面的回答中明确。希望对您有所帮助!
标签: objective-c ios core-data nsmanagedobject restkit