ios – CoreData:“无法删除从未插入的对象.”

ios – CoreData:“无法删除从未插入的对象.”,第1张

概述对于我的生活,我无法解决这个问题,但CoreData不断给我一个错误. Cannot delete object that was never inserted. 这是我的应用周期的主旨: 1 /推ViewController. 2 /从app delegate获取托管对象上下文. FLAppDelegate *appDelegate = (FLAppDelegate *)[[UIApplicat @H_419_1@ 对于我的生活,我无法解决这个问题,但CoreData不断给我一个错误.

Cannot delete object that was never inserted.

这是我的应用周期的主旨:

1 /推VIEwController.

2 /从app delegate获取托管对象上下文.

FLAppDelegate *appDelegate = (FLAppDelegate *)[[UIApplication sharedApplication] delegate];    self.managedobjectContext = appDelegate.managedobjectContext;

3 /检查会话是否存在.

4 /没有会话,创建一个新会话.

self.session = nil;            self.session = [NSEntityDescription insertNewObjectForEntityForname:@"Session" inManagedobjectContext:self.managedobjectContext];    //Set attributes etc...//Keep a reference to this session for later    [[NSUserDefaults standardUserDefaults] setURL:self.session.objectID.URIRepresentation forKey:kKeyStoredSessionObjectIDUriRep];            [[NSUserDefaults standardUserDefaults] synchronize];            NSError *error = nil;            if (![self.managedobjectContext save:&error])            {                //Handle error if save fails            }

5 / Pop VIEwController.

6 /返回VIEwController.

7 /再次,检查会话是否存在.

8 /找到一个会话! (通过查看我们存储的NSUserDefaults以供稍后参考).所以我先前创建了Session I,然后让用户选择删除那个并重新开始或继续使用那个.

NSURL *url = [[NSUserDefaults standardUserDefaults] URLForKey:kKeyStoredSessionObjectIDUriRep];    if (url) //Found existing flight session    {        NSManagedobjectID *objID = [self.managedobjectContext.persistentStoreCoordinator managedobjectIDForURIRepresentation:url];        NSManagedobject *obj = [self.managedobjectContext objectWithID:objID];        self.session = (Session *)obj;        //Ask the user if they want to continue with this session or discard and start a new one    }

9 /选择删除此会话并开始新会话.

10 /问题从这里开始!我删除了我对此会话保持的引用,因为它不再相关,并尝试删除该对象,然后保存这些更改.

[[NSUserDefaults standardUserDefaults] removeObjectForKey:kKeyStoredSessionObjectIDUriRep];            [[NSUserDefaults standardUserDefaults] synchronize];            [self.managedobjectContext deleteObject:self.session];            NSError *error = nil;            if (![self.managedobjectContext save:&error])            {                //Error!            }

11 /我们有了它,当我尝试运行save方法时,它会崩溃并抛出一个错误:NSUnderlyingException =“无法删除从未插入的对象.”;

我不知道它为什么这么说,因为我似乎在创建一个并创建引用时保存对象,从该引用中检索对象但是删除只是打破了所有内容.

解决方法 问题在于您的步骤4.在此步骤中您

>创建会话
>将其托管对象ID保存为用户默认值
>保存对托管对象上下文的更改.

失败的原因是,当您创建新的托管对象时,它具有临时对象ID,该ID仅在您保存更改之前有效.只要保存更改,它就会获得一个新的永久对象ID.您正在保存临时对象ID,但是当您稍后查找它时,它将再次无效.

您可以通过更改步骤4中的 *** 作顺序来解决此问题,以便您:

>创建会话
>保存对托管对象上下文的更改
>将会话的对象ID保存为用户默认值

这样,将值保存为用户默认值时,您将拥有永久ID.

总结

以上是内存溢出为你收集整理的ios – CoreData:“无法删除从未插入的对象.”全部内容,希望文章能够帮你解决ios – CoreData:“无法删除从未插入的对象.”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1069040.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存