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会很好,因为它不是缓存的。