我是不是通过在启动时获取一个对象并在我想要持久化数据时调用 save 来正确使用 Core Data?

Posted

技术标签:

【中文标题】我是不是通过在启动时获取一个对象并在我想要持久化数据时调用 save 来正确使用 Core Data?【英文标题】:Am I using Core Data properly by fetching an object once at startup and calling save when I want to persist the data?我是否通过在启动时获取一个对象并在我想要持久化数据时调用 save 来正确使用 Core Data? 【发布时间】:2010-11-12 16:36:46 【问题描述】:

我正在深入研究 ios 编程并在我的应用程序中使用 Core Data 来保存游戏数据,但是,我想知道我的方法是否是使用 Core Data 的错误方式。我的数据库中有三个表,前两个表与另一个表具有一对多的关系(即 UserProfile -->> Puzzle Packs -->> Puzzles)。

我使用和持久化数据的方法很简单,使用 NSFetchedResultsController 检索 UserProfile 的实例并将 UserProfile 对象作为实例 var 存储在我的 App Delegate 中。然后我在其余代码中使用该 UserProfile 对象来访问和修改拼图包和拼图的状态(代表用户在游戏中的进度),每当我对对象进行更改时,我只需调用 NSManagedObjectContext 的保存方法更新数据库,该数据库也存储在 App Delegate 中。

我的问题是,我是否应该在需要访问或修改数据库的任何时候从数据库中获取数据,或者是我目前的方法,一次获取顶部对象并经常调用 save 方法,这是使用 Core 的正确方法数据?

提前感谢您的智慧!如果我的问题很奇怪,我很抱歉,我还是个菜鸟。

【问题讨论】:

【参考方案1】:

只要您只使用单个 NSManagedObjectContext 处理这些对象(即,您永远不必合并上下文之间的更改),那么我认为获取一次并根据需要保存不会有问题。

也就是说,当您使用多个上下文时(例如,使用 NSOperation/NSOperationQueue 或其他需要单独上下文的多线程技术),您需要确保合并更改并更新其他上下文以便更改从一个线程不要破坏另一个线程。

【讨论】:

以上是关于我是不是通过在启动时获取一个对象并在我想要持久化数据时调用 save 来正确使用 Core Data?的主要内容,如果未能解决你的问题,请参考以下文章

核心数据在启动之间不持久

将信息保存到文件中并在启动时加载?

从批处理脚本启动exe并在缺少dll时获取错误代码

如何在我的无处不在的容器中获取所有可用的持久存储?

mongodb在运行吗?

Android 服务在推送通知发送时启动并在服务任务完成后停止