所以事实证明,RestKit 期望在将消息发送到之前保存上下文。我的问题是我在消息之后立即保存了上下文(我认为这没关系,因为这仍然是在加载程序从 web 服务得到响应之前。我正在做这样的事情:postObject:mapResponseWith:delegate
RKObjectManager
postObject:mapResponseWith:delegate
NSManagedObject *myObj = [NSEntityDescription insertNewObjectForEntityForName:@"MyObjects" inManagedObjectContext:context];
[[RKObjectManager sharedManager] postObject:myObj mapResponseWith:objMappingForPOST delegate:myObjLoader];
[context save:&error];
...然后myObjLoader
将得到响应并尝试更新myObj
(createdAt、parse 的 objectId 等)中的属性并抛出一个错误,指出 myObj 不存在。
我真的应该通读 RestKit 代码以确认,但我很确定正在发生的事情是在收到消息RKObjectManager
的时间点从托管对象存储创建后台线程和上下文,postObject:mapResponseWith:delegate
并且永远不会更新任何潜在的合并在响应返回之前可能存在。老实说,我希望在收到回复后创建上下文。
所以要做的是在发送postObject:mapResponseWith:delegate
消息之前保存上下文,如下所示:
NSManagedObject *myObj = [NSEntityDescription insertNewObjectForEntityForName:@"MyObjects" inManagedObjectContext:context];
[context save:&error];
[[RKObjectManager sharedManager] postObject:myObj mapResponseWith:objMappingForPOST delegate:myObjLoader];