核心数据实体未删除

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 时启用僵尸不起作用。我现在就去看看。

以上是关于核心数据实体未删除的主要内容,如果未能解决你的问题,请参考以下文章

核心数据实体布尔属性未保存在表格单元格删除中

核心数据迁移删除实体数据

核心数据:删除最后一个具有一对多关系的实体

更改未保存在核心数据模型中(例如删除对象)

核心数据 - 实体关系未按预期工作

保存已编辑的核心数据实体未保存