无法从iOS6中的后台线程调用主线程上的代码
在后台线程上保存托管对象上下文时,我正在侦听NSManagedObjectContextDidSaveNotification并尝试在主线程上合并它 但是,当我尝试将请求转发到主线程时,没有一个代码使用无法从iOS6中的后台线程调用主线程上的代码,ios,multithreading,ios6,nsmanagedobjectcontext,Ios,Multithreading,Ios6,Nsmanagedobjectcontext,在后台线程上保存托管对象上下文时,我正在侦听NSManagedObjectContextDidSaveNotification并尝试在主线程上合并它 但是,当我尝试将请求转发到主线程时,没有一个代码使用 [self performSelectorOnMainThread:@selector(executeThisCode:) withObject:saveNotification waitUntilDone:NO]; 也没有 dispatch_async(dispatch_get_main_
[self performSelectorOnMainThread:@selector(executeThisCode:) withObject:saveNotification waitUntilDone:NO];
也没有
dispatch_async(dispatch_get_main_queue(), ^{
...execute this code
});
奇怪的是,iOS 5.1和iOS 5.0都可以正常工作,但iOS 6却不行。有什么想法吗 您是否首先检查您是否已经在主线程中?如果调用
performSelectorOnMainThread
时,executeThisCode
是当前正在执行的方法的选择器,则这一点尤其重要。大概是这样的:
- (void) executeThisCode: (NSNotification*) notification{
if (![NSThread isMainThread]) {
[self performSelectorOnMainThread:@selector(executeThisCode:)
withObject:notification
waitUntilDone:YES];
return;
}
// merge logic goes here and executes on the main thread
}
你能试试Waituntone吗?是的?我注意到你把它设为“否”。