【发布时间】:2010-06-28 14:49:07
【问题描述】:
我在使用 Core Data 开发 iPhone 应用程序时遇到了崩溃问题。
应用在后台线程上将数据与网络服务同步。
当应用首次启动时,Core Data DB 中的现有数据将在 UITableView 中显示给用户,同时启动后台线程从 Web 服务 API 中获取最新数据。让我们将核心数据模型称为用户和项目,只是为了与拥有许多项目的用户进行讨论。这些项目是 UITableView 中显示的内容。
当返回 API 结果时,用户现有的项目记录将从核心数据中删除,并将新的项目记录集插入核心数据。解析完所有项目后,会向主线程发送一条消息,以合并核心数据更改并从 CD 重新获取数据。
但是,我在配置表格单元例程中不断崩溃,我确信这是因为超出范围的对象。这意味着,主线程正在尝试显示 Core Data 中的对象,而后台线程正在从 Core Data 中删除相同的对象并用新对象替换它们。
处理此类冲突的最佳方法是什么?我是否必须采用某种机制才能在主视图加载/显示其所有数据之前不启动后台线程更新?如果是这样,我该如何做到这一点?我还能保持相同的方法并更好地处理显示项目的删除吗?
【问题讨论】:
-
在我删除记录时,有没有办法锁定单个持久存储协调器?还是我应该使用单独的持久存储协调器?我不确定,只是在这里大声说出来,因为这是我第一次在应用程序中使用 Core Data。
-
为什么 Item 实体被删除而不是与来自 web 服务调用的更新状态合并?
-
它们被删除是因为我认为删除并重新插入更新的数据而不是尝试管理与项目的状态差异更容易。如果我只是尝试更新,我需要跟踪哪些属性已更改,然后更新这些属性,或者只是从 API 服务器完全重置项目。我最初的想法是,只进行批量删除/替换而不是从 API 解析对象、对 Core Data 进行一次查找,然后再进行一次更新操作会更容易
-
"尚未告知视图的 FRC 合并新更改。"你注册
NSManagedObjectContextDidSaveNotifiction了吗? -
@falconcreek,是的,我的应用程序委托注册了 NSManagedObjectContextDidSaveNotifiction,但没有注册 FRC 的视图控制器
标签: iphone uitableview core-data