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.managedObjectContext
和 managedObjectContext
之间切换。你确定这些是同一个变量吗?避免直接访问您的 ivars;使用访问器(init
和 dealloc
除外)。这样可以避免各种问题。
您确定managedObject
的ID 为objectID
?它们可能是两个看起来很相似的对象。
【讨论】:
【参考方案3】:上下文未正确保存
【讨论】:
【参考方案4】:鉴于之前的答案没有检查出来,我想说最可能的解释是托管对象是所需关系中的最后一个对象。因此,在删除关系另一端的对象或将第二个对象添加到关系之前,无法删除它。
您可能还想检查持久存储是否未设置为只读。我不记得当您尝试编写只读存储时遇到什么错误。
此外,您可能希望在测试对象之前等待几秒钟。保存是磁盘操作,因此相对较慢。保存实际上可能失败。
在任何情况下,您都应该从保存中捕获错误返回。
【讨论】:
以上是关于NSManagedObject 删除不起作用,仍然可以检索对象的主要内容,如果未能解决你的问题,请参考以下文章
使用 FirebaseHandle 删除 Firebase 观察者不起作用