核心数据删除上下文中的NSManagedObject花费时间?

时间:2013-09-18 04:37:12

标签: core-data nsmanagedobject nsmanagedobjectcontext

这是我在StackOverflow上的第一个问题。如果我犯了一些错误,请原谅我。 我正在尝试删除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

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

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

提前谢谢!

1 个答案:

答案 0 :(得分:2)

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

在主事件循环期间自动调用

processPendingChanges,这解释了 为什么你看到了变化"后来"。