我从persistentStoreManagedObjectContext
获取一个对象,并在UIView中向我的用户显示它的一些值。该对象,我们称之为Book
有一个Author
关系。每当我要显示那本书时,我会检查是否设置了作者。如果没有设置,我会这样做:
[[RKObjectManager sharedManager] getObjectsAtPath:[NSString stringWithFormat:@"/api/rest/userprofiles/%@/",_currentBook.authorID] parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {..}
在成功回调中,我想做一个:
_currentBook.author = mappingResult.firstObject;
if (![_currentBook.managedObjectContext saveToPersistentStore:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
然而,我无法做_currentBook.author = mappingResult.firstObject;
,因为我得到了:
Illegal attempt to establish a relationship between objects in different contexts
但是,我知道这个新获取的Author
保存在persistentStoreCoordinator中,因为我配置了我的RestKit这样做(或者它是默认情况下,我不记得了)。所以我不想再创建那个对象,我只想在我的currentContext中得到它的值persistentStoreManagedObjectContext
。我是否必须使用NSFetchedResultsController?
修改
我已经在书中连接到作者,通过authorID,我在从服务器获取Book对象的同时发送回来。但是,可能会出现尚未提取作者对象的情况,因此我会保留该ID。
[bookMapping addConnectionForRelationship:@"author" connectedBy:@{ @"authorID": @"identifier" }];
但是,即使提取了该作者,book.author也会设置为null,除非我再次在持久存储中重新安装。
答案 0 :(得分:0)
您应该让RestKit使用基于作者ID的外键映射来连接关系。这样,所有更新都在同一个上下文中同时进行,并在返回映射结果之前保存。