gpt4 book ai didi

ios - 通过 RestKit 发布 ManagedObject 结果为 "Cannot update object that was never inserted"

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:15:04 24 4
gpt4 key购买 nike

我创建一个托管对象保存上下文并像这样发布:

 [[RKObjectManager sharedManager] postObject:tag mapResponseWith:tagMappingForPOST delegate:tagLoader];

tagLoader 获取对象但未能保存在 RestKit 的上下文中说:

Failed to save managed object context after mapping completed: The operation couldn’t be completed. (Cocoa error 134030.)

NSUnderlyingException=Cannot update object that was never inserted.

我正在用同一个后端服务器 (Parse.com) 和同一个类做同样的事情,并且工作正常。关于为什么会出现“无法更新从未插入的对象”的潜在原因的任何线索。错误?

最佳答案

事实证明,RestKit 希望在 postObject:mapResponseWith:delegate 消息发送到 RKObjectManager 之前保存上下文。我的问题是我在 postObject:mapResponseWith:delegate 消息之后立即保存上下文(我认为这没问题,因为这仍然是在加载程序从 web 服务获得响应之前。我是做这样的事情:

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];

关于ios - 通过 RestKit 发布 ManagedObject 结果为 "Cannot update object that was never inserted",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11251674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com