Core data MagicalRecord:如何使用BlockAndWait取消保存?

Core data MagicalRecord:如何使用BlockAndWait取消保存?,core-data,ios7,magicalrecord-2.2,Core Data,Ios7,Magicalrecord 2.2,我接到一个服务电话,返回后会保存大量数据: [MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext) { for (NSDictionary *dictionary in result) { // create managed object, set parameters } }]; 现在,如果用户在for循环期间注销,我想取消保

我接到一个服务电话,返回后会保存大量数据:

    [MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext) {
        for (NSDictionary *dictionary in result) {
            // create managed object, set parameters
        }
    }];

现在,如果用户在for循环期间注销,我想取消保存-这是如何实现的?

您不能使用
saveWithBlockAndWait
,因为即使您有代码退出循环,它仍然会保存。在退出之前,您可以重置上下文,但您需要仔细考虑可能造成的副作用。

因此,您希望运行一个可以控制内容的块,以便在循环时检查标志,并在标志指示取消时退出该块而不保存

此外,如果要保存的项目太多,则应批量执行保存操作

因此,使用
MR_saveToPersistentStoreCompletion
保存,但首先检查取消标志,如果设置了,则从块返回:

localContext = NSManagedObjectContext.MR_contextForCurrentThread

[localContext performBlock:^{

    for (int i...) {

        ...

        if (i % 100 == 0) {
            if (!cancelled) {
                [context MR_saveToPersistentStoreAndWait];
            } else {
                return;
            }
        }
    }
}];

这样的块会是什么样子?包括批处理操作,即保存操作?谢谢,最后一个问题-如果我使用contextForCurrentThread或仅仅使用MR_上下文,会有什么不同吗?我会说MR_context更安全,因为MR_contextForCurrentThread可能也会重置同一线程中其他操作的数据,如果您重置了上下文,您的意思是?如果要重置,那么可能需要创建一个上下文,以后再也不要使用它。那么是的,MR_context会很好,因为它不是缓存的。