【发布时间】:2011-03-11 13:13:17
【问题描述】:
我在 Apple 的文档中找不到的简单、常见的模式:
- 加载核心数据存储
- 下载新数据,创建对象 在记忆中
- 将部分新数据保存到 存储(通常“只有新的比特/没有改变的比特”)
相反,我可以找到这些替代方案,但没有一个是正确的:
- 不要在内存中创建对象 (嗯,这意味着扔掉 关于对象的一切都很好。 使用大量代码编写代码 NSDictionary 没有任何目的 除了解决CoreData的 失败。一般不可用)
- 创建对象,然后删除 你不想要的(苹果建议 这在文档中,但他们的通知非常糟糕 错误:那些“删除”出现在 你试图保存,即使他们 不应该/不能)
- 在辅助中创建对象 上下文(Apple 强烈暗示这一点 是正确的,但显然没有提供任何方法 你从临时移动对象 真实的上下文,没有 执行上述操作(删除对象 你刚刚创建,然后做一个 保存)。这通常是不可能的,因为对象通常需要连接到新上下文中的引用,并且保存会失败)
当然,应该没这么难吧?
如果我必须编写所有代码来手动深度复制一个对象(通过向下迭代它的所有字段和数据结构),为什么 CoreData 首先存在?这是 CD 内部提供的基本功能。
到目前为止,我工作的唯一解决方案是选项 2(来自苹果的文档),当 Apple 发送 NSNotifications 时,Apple 发送的对象本来不应该被保存(但 Apple 发送无论如何通知)。这是一个可怕的黑客攻击。
编辑:澄清:
我不知道如何正确发送 Apple 的通知。 Apple的代码似乎将插入转换为“更新”,将“临时对象”转换为“删除”等。我无法监听“新对象”。
【问题讨论】:
标签: iphone core-data nsmanagedobjectcontext