1

我正在编写一个 Core Data 应用程序,并且我已经开始将我的对象传递给我的视图和管理器。例如,我的 UIImageView 子类知道如何从对象中提取图像数据,如果尚未加载图像数据,它知道如何获取、分配和使用图像。我有一个单例管理器将数据上传到服务器,这些管理器获取托管对象,然后在成功上传时使用服务器 ID 更新它们。

这似乎是错误的方法,因为我正在删除托管对象(服务器告诉我对象已在服务器端被删除)。问题是对象可以从我的视图和管理器下方删除。

更多示例:如果完成块仍持有该对象,则将使用已删除的托管对象调用它。如果通知或用户事件在消失之前进入视图,它也会尝试访问已删除的对象。是的,当底层对象被删除(不再匹配我的获取谓词)时,我的表视图/集合视图将刷新并删除关联的视图,但仍然存在完成块。

如果要删除对象,像这样传递托管对象是否安全?到目前为止,这种方法就像做梦一样,我开始认为我需要将托管对象与我的所有视图和管理器完全分离。也就是说,控制器获取对象,创建视图/单元格并设置所有需要的数据(包括在委托操作发生时引用对象的 ID),然后让对象再次出现故障。当用户以任何方式与视图交互时,它必须回调控制器,获取相关对象并使用该数据。我应该停止持有我的托管对象,还是有一种干净的方法来检查整个地方的 .isDeleted?

4

1 回答 1

0

如果你的 moc 只在主线程上工作,那么它可能不会太危险,但我想说的不是一个好的设计决策。如果您在主线程之外进行 moc 工作(私有调度队列或使用 new-ado-of-ios5 选项让 moc 使用私有队列),那么您所做的就是鲁莽。

我有类似的设计,但在 moc 上使用了 new-private-queue 选项。任何想要从 moc 获得某些东西的对象都必须通过我的单例接口获取它,该接口确实使用“performBlock”命令。这种设计的好处是,当我写作时,我只使用“performBlock”。检索信息显然是使用“performBlockAndWait”完成的。

这个界面给了我很大的自由来重构核心数据代码,而不必接触其他任何东西(我现在已经做了 4 次了)。

编辑:此链接中有更多细节

于 2012-09-28T23:21:50.803 回答