gpt4 book ai didi

ios - NSManagedObjectContextDidSaveNotification 没用?

转载 作者:行者123 更新时间:2023-11-29 11:59:32 27 4
gpt4 key购买 nike

我在背景上下文中使用 Core Data 有一段时间了,想知道为什么每个人都建议使用 NSManagedObjectContextDidSaveNotification 从后台合并到主上下文。我创建了一个测试项目,其中包含一个 NSPersistentStoreCoordinator、一个主上下文和一个后台上下文。这是初始化的代码片段:

- (NSManagedObjectContext *)managedObjectContext {

if (_managedObjectContext != nil) {
return _managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}

return _managedObjectContext;
}



- (NSManagedObjectContext *)backgroundContext {
if (_backgroundContext != nil) {
return _backgroundContext;
}
_backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
_backgroundContext.persistentStoreCoordinator = self.persistentStoreCoordinator;

return _backgroundContext;
}

到现在为止,我会这样收听保存通知:

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:self.backgroundContext];

但我意识到,是否从该通知中合并并不重要。我可以编辑和保存任一上下文,而另一上下文会在几秒钟后自动合并。

所以。我的问题是,为什么我什至需要 NSManagedObjectContextDidSaveNotification

最佳答案

您的上下文不相关。它们都是附加到同一个持久存储协调器的根上下文。

对持久存储的更改会自动推送到与其关联的根上下文(这就是为什么您不需要处理 NSManagedObjectContextDidSaveNotification 通知的原因。)

NSManagedObjectContextDidSaveNotification 在处理更复杂的上下文祖先时很有用,因为中级上下文在更改时不会自动通知其所有子级。

例如,查看 Cadmium 的架构图 (https://github.com/jmfieldman/Cadmium)。当后台子上下文保存到编写器上下文时,主上下文必须在主线程上处理 NSManagedObjectContextDidSaveNotification 以合并更新。

关于ios - NSManagedObjectContextDidSaveNotification 没用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37581441/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com