如果要删除托管对象,将托管对象传递给视图,管理器和块是否安全?

时间:2012-09-28 23:13:43

标签: iphone objective-c ios core-data

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

我有类似的设计,但在moc上使用new-private-queue选项。任何需要来自moc的东西的对象必须通过我的单例接口获取它,它使用'performBlock'命令。这个设计的好处是,当我写作时,我只使用'performBlock'。显然,使用'performBlockAndWait'来检索信息。

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

编辑:有更多细节in this link