【发布时间】:2012-01-30 12:53:47
【问题描述】:
我正在尝试使用 RestKit 和 Core Data 作为服务器端数据的本地缓存,但我无法做到
我创建了一个 NSManagedObject :
@interface JSONShop : NSManagedObject
@property (nonatomic, retain) NSNumber * shopId;
@property (nonatomic, retain) NSNumber * type;
@end
@implementation JSONShop
@synthesize shopId;
@synthesize type ;
@end
它由 Restkit 自动映射和存储,我可以从数据库中获取它以显示在 TableViewController 中。
我的表上有一个主键(在我的映射中定义),例如:
shopMap.primaryKeyAttribute = @"shopId" ;
当我第一次存储我的对象时,一切都很好:)
之后,当我删除上下文中的所有实体时,当 Restkit 尝试再次映射它并再次保存它但我收到此错误:
'CoreData could not fulfill a fault for '0x9412ea0 <x-coredata://F8451322-3890-430F-8ABD-B5EEF1DFED2F/JSONShop/p177>''
你知道为什么吗?
这是我的删除代码:
- (void) deleteAllObjects: (NSString *) entityDescription {
NSLog(@"Deleting %@",entityDescription);
NSManagedObjectContext * managedObjectContext = [[RKObjectManager sharedManager].objectStore managedObjectContext] ;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityDescription inManagedObjectContext:managedObjectContext];
NSError * error ;
[fetchRequest setEntity:entity];
NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject *managedObject in items) {
[managedObjectContext deleteObject:managedObject];
}
if (![managedObjectContext save:&error]) {
NSLog(@"Error deleting %@ - error:%@",entityDescription,error);
}
}
【问题讨论】:
-
删除和下载/保存是否发生在同一个线程中,并在删除后保存顺序?
-
我想是的,在 MainThread 上按以下顺序完成操作 1. 使用将数据存储在 Core Data 中的 Restkit 获取 2. 手动删除数据 3. 使用 Restkit 再次获取 => 崩溃
-
您在所有这些中使用相同的 managedObjectContext 吗?
-
是的,我正在使用这个:[[RKObjectManager sharedManager].objectStore managedObjectContext]。
-
对不起,我无法完全解决这个问题。在一个线程上使用标准 managedobjectcontext 描述的模式应该会成功。
标签: iphone ios core-data restkit