我有两个NSManagedObjectContext,一个用于ui,另一个用于后台任务。每当后台更改时,我都会尝试将更改合并到UIcontext。但每当我打电话
mergeChangesFromContextDidSaveNotification:notification
它只是开始吃内存(在模拟器上将达到1GB)并导致崩溃。
当然我设置了一个通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(coreUpdateFromApp:)
name:NSManagedObjectContextDidSaveNotification
object:nil];
并尝试在主线程等中进行合并。没有运气!
我发现URIRepresentation引起了这个问题。出于某种原因,它一直被召唤。 (通过苹果公司的代码不是我的)
请注意,我让它运行不到一秒,它使用64.95MB,它将使用相同的调用树快速增长。如果我继续运行它也会使osx崩溃!
答案 0 :(得分:4)
问题是object:nil
。你正在听到无尽的通知回声。
您需要指定一个特定的上下文对象来收听来自的通知。
答案 1 :(得分:0)
问题在于,由于Google Analytics也在使用核心数据,因此我们也会拦截Google Analytics引发的无休止通知。
将对象设置为非零值对我来说不起作用。找到另一种方式,它对我来说是神奇的。
在你的观察者里面我有选择器方法,如下所示
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(managedObjectContextDidSave(_:)), name: NSManagedObjectContextDidSaveNotification, object: nil)
和
func managedObjectContextDidSave(notification: NSNotification) {
if notification.object?.persistentStoreCoordinator != self.persistentStoreCoordinator {
return
}
//do remaining task here.
}