2013-04-25 20 views
0

我有一堆NSOperations与他们自己的NSManagedObjectContexts更改我的核心数据存储和保存并成功地将其更改到主线程的NSManagedObjectContext。我知道的很多。现在我想要在主要上下文更新时通知前端UIViewController。所以我...是否NSManagedObjectContext的mergeChangesFromContextDidSaveNotification:post NSManagedObjectContextDidSaveNotification?

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(refreshData:) 
               name:NSManagedObjectContextDidSaveNotification 
               object:[NSManagedObject mainThreadManagedObjectContext]]; 
} 

但是我不合并来自后台线程改变主线程的的NSManagedObjectContext被张贴了自己的任何通知后的想法。我试图在苹果公司的文档中找到某处,告诉主线程合并更改或其他一些内容后,我应该发布自己的文档,但没有运气。对于我的NSOperation我有...额外的参考

+ (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听到它保存,或者我应该mergeChangesFromContextDidSaveNotification后后我自己的通知:?

回答

4

mergeChangesFromContextDidSaveNotification:不发帖NSManagedObjectContextDidSaveNotification,因为mergeChangesFromContextDidSaveNotification:不告诉上下文保存。

也许你的前面UIViewController应该遵守NSManagedObjectContextObjectsDidChangeNotification

+0

感谢rob,我也试过,并收到了一次通知我的上下文改变了500次。你知道会导致什么吗? (我在mergeChangesFromContextDidSaveNotification:时调用了一个断点,并且每次都看到它被调用)很奇怪。 – rob5408 2013-04-25 05:14:49

+0

其实它看起来像我没有任何引用任何对象(只有故障),我认为这就是为什么我没有收到通知。作为测试,我从商店选择一个对象来保持并每次都收到通知。需要弄清楚设置这个最合理的方法,但是这对我有帮助,谢谢! – rob5408 2013-04-25 05:28:07

相关问题