NSManagedObject 删除不起作用,仍然可以检索对象

Posted

技术标签:

【中文标题】NSManagedObject 删除不起作用,仍然可以检索对象【英文标题】:NSManagedObject delete not working, can still retrieve the object 【发布时间】:2011-09-26 14:15:10 【问题描述】:

我正在尝试删除一个托管对象,有什么我遗漏的吗?

[managedObjectContext deleteObject:managedObject];

NSError *error;

if (![self.managedObjectContext save:&error]) 
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
    return NO;


return YES;

当我运行此代码时,仍然可以检索对象。

NSManagedObject *objectiveManagedObject = [managedObjectContext objectWithID:objectID];

return (ObjectiveManagedObject *)objectiveManagedObject; 

【问题讨论】:

【参考方案1】:

如果你这样做会发生什么

[[self managedObjectContext] setPropagatesDeletesAtEndOfEvent:NO]

第一个?

【讨论】:

这会导致其他代码中断,从而在单元测试之间清除数据库【参考方案2】:

我注意到您已在 self.managedObjectContextmanagedObjectContext 之间切换。你确定这些是同一个变量吗?避免直接访问您的 ivars;使用访问器(initdealloc 除外)。这样可以避免各种问题。

您确定managedObject 的ID 为objectID?它们可能是两个看起来很相似的对象。

【讨论】:

【参考方案3】:

上下文未正确保存

【讨论】:

【参考方案4】:

鉴于之前的答案没有检查出来,我想说最可能的解释是托管对象是所需关系中的最后一个对象。因此,在删除关系另一端的对象或将第二个对象添加到关系之前,无法删除它。

您可能还想检查持久存储是否未设置为只读。我不记得当您尝试编写只读存储时遇到什么错误。

此外,您可能希望在测试对象之前等待几秒钟。保存是磁盘操作,因此相对较慢。保存实际上可能失败。

在任何情况下,您都应该从保存中捕获错误返回。

【讨论】:

以上是关于NSManagedObject 删除不起作用,仍然可以检索对象的主要内容,如果未能解决你的问题,请参考以下文章

路线存在但不起作用,删除的路线仍然有效 Laravel

将 NSManagedObject 传递给子上下文不起作用

使用 FirebaseHandle 删除 Firebase 观察者不起作用

NSManagedObject 删除无法正常工作

ManagedObjectModel 子类在 Swift 中不起作用

Coredata,级联删除不起作用