2012-10-23 37 views
0

在后台线程上保存托管对象上下文时我正在监听NSManagedObjectContextDidSaveNotification并尝试在主线程上合并它。无法从iOS6中的后台线程调用主线程上的代码

然而,当我尝试将请求转发给主线程,没有代码的执行既不使用

[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

你是否首先检查你是否已经在主线程中?如果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 
} 
+0

是的,我检查它 – Gytis

+0

你可以试试waitUntilDone:是吗?我注意到你已经设置为NO。 – abellina

+0

你最终做了什么? – abellina

相关问题