2011-07-14 61 views
0

这是一个棘手的问题。核心数据关系,多个托管对象上下文和线程

我有Document实体,当前正从后台线程上的SQLite数据库导入到CoreData中。背景线程有一个单独的上下文,我正在每500个条目分配一次保存。

保存后台线程上下文会触发一个通知,该通知抓取我的主线程的上下文并在两者之间执行合并。

如果我只导入document实体,一切都按预期工作。

当我尝试建立当前document被创建时,另一个实体briefcase之间的关系时,会出现我的问题。

这就是我的进口程序目前确实:

  • 通过SQLite数据库行创建Briefcase实体
  • 循环和创造Document实体的每一行
  • 创建回路中的文档之间的关系,公文包实体
  • 每隔500行,我保存&重置上下文。这会触发一个ContextSave通知,该通知抓取主线程并与主线程的上下文合并。
  • 这是我的问题是:保存&复位上面,我Briefcase实体获取与主线程,所以当我继续循环合并之后,下一个文档实体创建试图将自身与公文包相关联,这是在我得到一个崩溃,说我无法在单独的线程上建立对象之间的关系。

我知道,如果在保存后删除调用以重置上下文的调用,那么所有操作都按预期工作,但是我的内存占用量增加了,这不是我准备接受的。

所以我的问题是:

  • 你能想到的周围(合法的)保持公文包实体整个导入过程,所以我可以继续创建关系的一种方式?

  • 我的第一个想法是创建没有上下文的公文包实体,然后在整个过程完成后将其添加到上下文中。这并没有奏效(它在创作时崩溃了)。

您的想法非常感谢。 罗格

回答

1

回答我的问题:

  • 通过SQLite数据库行创建公文包实体
  • 环路和创建文档实体的每一行
  • 创建循环和公文包的文档之间的关系实体
  • 每隔500行保存上下文&在保存后立即存储公文包的对象ID
  • 现在它的确定重置上下文
  • (Re)的检索用的objectID上面保存的公文包实例和existingObjectWithID:错误:方法
  • 循环继续...
相关问题