核心数据,主线程中的通知

时间:2013-10-17 09:56:45

标签: ios objective-c

我的代码就像这样:

- (id)init
{
   self = [super initWithNibName:nibName bundle:nil];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(userDataDidUpdate)
                                                     name:NSManagedObjectContextDidSaveNotification
                                                   object:[UserData managedObjectContext]];
    }
    return self;
}

- (void)userDataDidUpdate
{
   // notification received...
}

在另一个类(CoreData管理器)中,我这样做:

[[UserData managedObjectContext] performBlock:^{

                     NSError *error;
                     if (![[UserData managedObjectContext] save:&error])
                     {
                         // handle error
                     }

                     isSyncing = NO;
                     [[NSNotificationCenter defaultCenter] postNotificationName:NDUserDataSyncDidUpdateLocalData object:nil];

                     }];

问题是我在托管的objectContext的performBlock中发送通知,而不是主线程。如何在主线程中的performBlcok内发送通知?

由于

2 个答案:

答案 0 :(得分:0)

这两个片段有何关联?注册/发送了不同的通知。

无论如何,您可以执行以下操作:

dispatch_async(dispatch_get_main_queue(), ^{
    [[NSNotificationCenter defaultCenter] postNotificationName:NDUserDataSyncDidUpdateLocalData object:nil];        
});

P.S。我希望你以dealloc方法从通知中心删除观察者。

答案 1 :(得分:0)

使用GCD很简单,只需将其包裹起来:

dispatch_sync(dispatch_get_main_queue(), ^{
  [[NSNotificationCenter defaultCenter] postNotificationName:NDUserDataSyncDidUpdateLocalData object:nil];
});

请注意,我在此处使用了dispatch_sync而不是dispatch_async,因为您通常希望在从通话postNotificationName:...返回之前完全处理您的通知。