获取 Persistent Storage 中的 MappingResult firstObject 值,避免出现“非法建立关系”错误
Posted
技术标签:
【中文标题】获取 Persistent Storage 中的 MappingResult firstObject 值,避免出现“非法建立关系”错误【英文标题】:Get the MappingResult firstObject value within the Persistent Storage to avoid "Illegal attempt to establish relationships" errors 【发布时间】:2013-07-22 14:28:17 【问题描述】:我正在从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,除非我在持久存储中再次 REFETCH。
【问题讨论】:
【参考方案1】:您应该让 RestKit 使用基于作者 ID 的外键映射来连接关系。这样一来,所有的更新都会在相同的上下文中同时进行,并在映射结果返回之前保存。
【讨论】:
请参阅编辑。我已经在这样做了,但我并没有在作者之间保持逆向,因为作者本质上是一个用户,这与许多其他事情有关。以上是关于获取 Persistent Storage 中的 MappingResult firstObject 值,避免出现“非法建立关系”错误的主要内容,如果未能解决你的问题,请参考以下文章
Exception loading sessions from persistent storage
[Docker] Create Docker Volumes for Persistent Storage
Exception loading sessions from persistent storage
Exception loading sessions from persistent storage
tomcat错误之:Exception loading sessions from persistent storage java.io.EOFException