核心数据实体未删除
Posted
技术标签:
【中文标题】核心数据实体未删除【英文标题】:Core Data entity not deleting 【发布时间】:2015-02-06 15:52:38 【问题描述】:这应该很简单,但无论我尝试多少方法都行不通。我检查了 SQLite 存储,可以确认该实体永远不会被删除。代码如下:
NSArray *accs = [[Storage getInstance] getAllAccountsArrFromDb];
for (Account *a in accs)
[a MR_deleteEntityInContext:a.managedObjectContext];
[a.managedObjectContext MR_saveToPersistentStoreAndWait];
当我按下注销按钮时,我删除了一个帐户,但尽管此代码已运行,但该帐户仍保留在数据库中,导致下次登录时出现问题。
我做错了什么?
编辑:
我也尝试从默认上下文和 MR_context 中删除。
【问题讨论】:
大概您检查了accs
包含该对象?
我在循环之前和之后检查了数组的计数,它保持不变。对象未移除。
从上下文中删除对数组内容没有任何影响。
@Wain 我知道。删除完成后,我再次从数据库创建数组。
【参考方案1】:
尝试将您的循环(我不记得了,但删除后麦克风可能会被取消)更改为:
NSArray *accs = [[Storage getInstance] getAllAccountsArrFromDb];
for (Account *a in accs)
NSManagedObjectContext *moc = a.managedObjectContext;
[a MR_deleteEntityInContext:moc];
[moc MR_saveToPersistentStoreAndWait];
(最好是分批保存,而不是每次删除后保存)
【讨论】:
如果有多个帐户,我会收到EXC_BAD_ACCESS
崩溃。如果只有一个帐户,我不会崩溃,但不会删除。我也尝试过使用 MagicalRecords truncateALL
方法删除实体中的所有对象,它也不起作用。
这表明您正在尝试删除已被删除/无效的内容。打开僵尸并使用仪器了解有关崩溃的更多信息。
我正在使用 ARC,所以僵尸无法工作。我注意到我偶尔会在控制台中收到此错误:CoreData: error: Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. An NSManagedObjectContext cannot delete objects in other contexts. with userInfo (null)
使用 ARC 并不神奇,它不能解决所有内存问题,也不排除僵尸......
我的印象是在使用 ARC 时启用僵尸不起作用。我现在就去看看。以上是关于核心数据实体未删除的主要内容,如果未能解决你的问题,请参考以下文章