如何从UI(主)线程保存快速属性更改

时间:2017-04-16 14:58:16

标签: ios multithreading core-data magicalrecord

我正在使用MagicalRecord,我正在尝试找出最简单的方法来保存用户在与UI交互时所做的更改。

从MagicalRecord文档我知道我可以使用后台线程:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {

    // Do your work to be saved here, against the `localContext` instance
    // Everything you do in this block will occur on a background thread

} completion:^(BOOL success, NSError *error) {
    // done
}];

这有效并且不是太糟糕,但是带来一些额外的开销,你必须确保你在块内处理的所有实体都是localContext的一部分。

但是假设我有3个属性是从UI设置的,用户点击了保存:

- (void) onSaveTapped {
   entity.property1 = @"foo";
   entity.property2 = @"bar";
   entity.property3 = @"tar";
}

此时可以抓住默认的上下文魔法记录(主线程)并保存吗?

NSManagedObjectContext defaultContext = [NSManagedObjectContext MR_defaultContext];
// Save the changes to the defaultContext
// Entity was part of that same context as it was used in the UI thread, just save that context
[defaultContext MR_saveToPersistentStoreWithCompletion:^(BOOL contextDidSave, NSError *error) {
    // done
}];

根据我的理解,MagicalRecords defaultContext有一个位于后台线程的父级,并且该父级将保存到持久性存储中。这意味着在保存到商店时不应阻止UI线程。

总结问题: saveWithBlock方法是否可以在这些实体不属于主线程上下文时将大量数据导入核心数据?当保存属于UI的实体时,您可以只调用MR_saveToPersistentStoreWithCompletion吗?

0 个答案:

没有答案