在初始加载时快速重置Core Data属性标志?

时间:2012-11-26 15:03:21

标签: iphone objective-c cocoa-touch core-data

我在Core Data数据库中的每个实体上都有一个flag属性,我想在打开数据库后立即重置它。有没有办法快速设置所有对象的标志(相同的值),而不执行NSFetchRequest,更新标志并再次保存所有内容。我很好奇,因为我在应用程序加载时这样做,所以我想确保使用最有效的方法。

3 个答案:

答案 0 :(得分:1)

在应用加载之前完成此更新是否必不可少?

如果加载完成后需要几秒钟才能影响应用程序?

如果是这样,你可以把它扔给后台线程。这意味着应用程序可以快速加载,但您的coredata会在BG中更新。

答案 1 :(得分:1)

不,实际上没有明显的方法来避免取钱 - 改变 - 储蓄。当然,为了不阻止UI,建议在后台线程上执行此操作。

但是,您可能想要考虑整体设计并询问是否真的有必要提出问题。

答案 2 :(得分:1)

不,这是核心数据的局限之一 - 它的设计并未考虑批量更新。

如果某些对象已经具有新值,则可以使用fetch谓词对其进行过滤,从而加快速度。例如,如果您将布尔标志设置为NO,则仅获取当前设置为YES的对象。

此外,使用GCD和dispatch_apply()并行进行更新可能会有所帮助。通过使用多个核心而不是一个核心,您将获得一些提升。托管对象不是线程安全的,但是这应该有效(a),因为在确保保存更改之前确保所有更新都已完成,并且(b)您没有从其他线程中弄乱托管对象或托管对象上下文而更新正在进行中。