Core Data 在 Context 中删除 NSManagedObject 需要时间吗?

Posted

技术标签:

【中文标题】Core Data 在 Context 中删除 NSManagedObject 需要时间吗?【英文标题】:Core Data delete NSManagedObject in Context take time? 【发布时间】:2013-09-18 04:37:12 【问题描述】:

这是我在 *** 上的第一个问题。如果我犯了一些错误,请原谅我。 我正在尝试删除 Submission 对象中的所有 NSManagedObject ESAnswer。

NSLog(@"BEFORE");
for (ESAnswer *ans in _currentSubmission.answer) 
    NSLog(@"%@", ans.questionID);


// Delete all answer with index from _nextQuestionsIndexStack.m_array
for (NSNumber *index in _nextQuestionsIndexStack.m_array) 
    // Find ESAnswer object with questionID
    NSString *questionID = _question[index]; 
    NSPredicate *predicateAnswer = [NSPredicate predicateWithFormat:@"questionID LIKE %@", questionID];
ESAnswer *foundAnswer = [[_currentSubmission.answer filteredSetUsingPredicate:predicateAnswer] anyObject];

    // Delete object
    [context deleteObject:foundAnswer];
    NSLog(@"Deleted %@", foundAnswer.questionID);


NSLog(@"AFTER");
for (ESAnswer *ans in _currentSubmission.answer) 
    NSLog(@"%@", ans.questionID);

但是控制台输出就像没有被删除(所有对象都在同一个 NSManagedObjectContext 中):

2013-09-18 11:01:36.541[3661:707] BEFORE
2013-09-18 11:01:36.543[3661:707] 52368675231dbba60e000065
2013-09-18 11:01:36.544[3661:707] 522ff38a93ebc0ce4f000008
2013-09-18 11:01:36.545[3661:707] 52368662231dbba60e000060
2013-09-18 11:01:36.553[3661:707] Deleted 52368675231dbba60e000065
2013-09-18 11:01:36.558[3661:707] Deleted 52368662231dbba60e000060
2013-09-18 11:01:36.563[3661:707] Deleted 522ff38a93ebc0ce4f000008
2013-09-18 11:01:36.564[3661:707] AFTER
2013-09-18 11:01:36.565[3661:707] 52368675231dbba60e000065
2013-09-18 11:01:36.567[3661:707] 522ff38a93ebc0ce4f000008
2013-09-18 11:01:36.570[3661:707] 52368662231dbba60e000060

在我计算下一步之前,应该删除这些答案。 但是在运行时,在删除之前使用旧数据调用计算方法。当我让它停留一段时间时,使用新数据调用计算方法。

所以,我的问题是: 1. 在上下文中删除 NSManagedObject 是否需要一些时间才能完成? 2. 如果是这样,我怎样才能让计算方法等待删除完成?

提前谢谢你!

【问题讨论】:

【参考方案1】:

deleteObject: 只标记要删除的对象。您可以save 上下文,或致电 processPendingChanges 使上下文实际执行对对象图的更改。

processPendingChanges 在主事件循环期间被自动调用,这解释了 为什么您会在“稍后”看到这些变化。

【讨论】:

以上是关于Core Data 在 Context 中删除 NSManagedObject 需要时间吗?的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 对象删除使应用程序崩溃

在后台同步的同时在 UI 交互上操作 Core Data Context 的最佳实践

RestKit / Core Data:远程删除的实体不会从 Core Data 中删除

如何取消删除 Core Data 中标记为删除的托管对象?

如何在 Swift 中从 Core Data 中删除数据时删除 UITableView 行?

如果从 Core Data SwiftUI 中删除,则删除本地通知