0

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

4

3 回答 3

1

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

如果加载完成后需要几秒钟,它会影响应用程序吗?

如果是这样,您可以将其丢给后台线程。这意味着应用程序加载速度很快,但您的核心数据会在 BG 中更新。

于 2012-11-26T15:08:08.260 回答
1

不,确实没有明显的方法可以避免获取-更改-保存。当然,建议在后台线程上执行此操作,以免阻塞 UI。

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

于 2012-11-26T15:08:21.010 回答
1

不,这是 Core Data 的限制之一——它在设计时并没有考虑到批量更新。

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

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

于 2012-11-26T18:16:10.170 回答