我遇到了一个奇怪的问题。我有以下设置:
Model.xcdatamodeld
ModelBackup.xcdatamodeld
其中每个都有自己的NSManagedObjectContext
NSPersistantStoreCoordinator
和NSMananagedObjectModel
。
我可以分别成功地阅读和写入这些内容。但是,如果我在读取/写入Model
的同时尝试读/写ModelBackup
,我将获得无限的内存分配。在模拟器中,CPU将飙升至200%,内存将增加约80-100 MB /秒。当内存达到2.0 + GB时,这最终会崩溃。当我在这两个context save
上执行NSManagedObjectContext
时会发生这种情况。我可以很好地阅读/访问它们。
任何人都知道为什么我不能写这两个?
Model
ConcurrencyType:NSMainQueueConcurrencyType
和ModelBackup
ConcurrencyType:NSPrivateQueueConcurrencyType
。{/ p>
有两个不同的xcdatamodeld
背后的想法是parent-child
核心数据模式的变通方法/替代方法。我们的应用程序正在对datamodel
进行大量更新,因此我希望有一个后台数据模型执行这些更新,然后当应用程序下次启动时,切换到新更新的sqlite。
答案 0 :(得分:3)
首先,只要您注意在任何一次保存时写入磁盘的数量,您就可以与父/子进行大量更新。
其次,您可以将两个NSPersistentStoreCoordinator
实例指向同一个sqlite文件,并避免使用两个文件。
第三,您的代码对于创建这些上下文有什么作用?您是否仅在-performBlock:
来电中使用第二个上下文?
第四,当你停止在内存分配中间时会发生什么?你的堆栈是什么样的?
对于您的直接问题,您有一个无限循环。如果我不得不猜测我猜你正在使用NSManagedObjectContextDidSaveNotification
,可能使用nil
对象,并且每次保存都会启动保存到其他上下文导致循环。
查看代码有助于解决您的问题。但是我怀疑你的问题有一个更简单的解决方案。