Objective c NSManagedObjectContext';s mergeChangesFromContextDidSaveNotification:post NSManagedObjectContextDidSaveNotification?
我有一组NSOperations,它们有自己的NSManagedObjectContext,对我的核心数据存储进行更改,并保存这些更改,并成功地将它们的更改保存到主线程的NSManagedObjectContext中。我知道这么多。现在,我希望在更新主上下文时通知前端UIViewController。所以我Objective c NSManagedObjectContext';s mergeChangesFromContextDidSaveNotification:post NSManagedObjectContextDidSaveNotification?,objective-c,core-data,nsmanagedobjectcontext,Objective C,Core Data,Nsmanagedobjectcontext,我有一组NSOperations,它们有自己的NSManagedObjectContext,对我的核心数据存储进行更改,并保存这些更改,并成功地将它们的更改保存到主线程的NSManagedObjectContext中。我知道这么多。现在,我希望在更新主上下文时通知前端UIViewController。所以我 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [[NSNotificatio
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(refreshData:)
name:NSManagedObjectContextDidSaveNotification
object:[NSManagedObject mainThreadManagedObjectContext]];
}
但是,我不认为在合并来自后台线程的更改后,主线程的NSManagedObjectContext会发布任何自己的通知。我试图在文档中找到一个地方,苹果说我应该在告诉主线程合并更改或类似更改后发布我自己的内容,但没有成功。为了在我的操作中提供额外的参考,我有
+ (void)mergeChanges:(NSNotification *)notification
{
NSManagedObjectContext *managedObjectContext = [self mainThreadManagedObjectContext];
[managedObjectContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification
waitUntilDone:YES];
}
+ (NSManagedObjectContext *)adHocManagedObjectContext
{
NSManagedObjectContext *adHocManagedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] adHocManagedObjectContext];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:adHocManagedObjectContext];
return adHocManagedObjectContext;
}
我应该期望从主线程的NSManagedObjectContext听到关于它保存的消息,还是应该在合并更改后发布自己的通知FromContextDidSaveNotification:?
合并更改FromContextDidSaveNotification:
不发布NSManagedObjectContextDidSaveNotification
,因为mergeChangesFromContextDidSaveNotification:
不会告诉上下文保存
也许您的前端
UIViewController
应该遵守。合并更改fromContextDidSaveNotification:
没有发布NSManagedObjectContextDidSaveNotification
,因为合并更改fromContextDidSaveNotification:
没有告诉上下文保存
也许您的前端
UIViewController
应该遵守。谢谢rob,我也试过了,在我的上下文更改了500次之后,我收到了通知。你知道是什么引起的吗?(我在调用mergeChangesFromContextDidSaveNotification:时设置了一个断点,每次都会看到它被调用)太奇怪了。实际上,看起来我没有保存任何对象的引用(只有错误),我想这就是我没有收到通知的原因。作为一个测试,我从存储中选择了一个要保留的对象,每次都收到通知。需要找出最符合逻辑的方法来设置,但这对我有帮助,谢谢!谢谢rob,我也试过了,在我的上下文发生变化的500次中,我收到了一次通知。你知道是什么引起的吗?(我在调用mergeChangesFromContextDidSaveNotification:时设置了一个断点,每次都会看到它被调用)太奇怪了。实际上,看起来我没有保存任何对象的引用(只有错误),我想这就是我没有收到通知的原因。作为一个测试,我从存储中选择了一个要保留的对象,每次都收到通知。需要找出最符合逻辑的方法来设置,但这对我有帮助,谢谢!