无法从iOS6中的后台线程调用主线程上的代码

时间:2012-10-23 15:19:02

标签: ios multithreading ios6 nsmanagedobjectcontext

在后台线程上保存托管对象上下文时,我正在侦听NSManagedObjectContextDidSaveNotification并尝试将其合并到主线程上。

但是当我尝试将请求转发到主线程时,没有任何代码都是使用

执行的
[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.任何想法?

1 个答案:

答案 0 :(得分:1)

您首先检查您是否已经在主线程中?如果executeThisCode是您在调用performSelectorOnMainThread时正在执行的方法的选择器,那么这将特别相关。像这样:

- (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
}