我的代码就像这样:
- (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内发送通知?
由于
答案 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:...
返回之前完全处理您的通知。