2012-10-23 36 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

相關問題