在我的多選項卡應用程序中,一個線程關心偵聽來自服務器的消息,它必須能夠在收到特定消息時相機處於活動狀態時關閉UIImagePickerController。該線程通過NSThread detachNewThreadSelector運行。從不同線程關閉UIImagePickerController
我設法調用通過ApplicationDelegate上線側調用正確的順序,但選擇器沒有被駁回:
- (void) closeCameraController {
[cameraTabController closeSubViewCamera]; // Invokes cancel: on the cameraSubView.
}
同一序列正常工作,當我通過映射到一個按鈕的事件啓動照相機覆蓋的(一個 '取消' 按鈕):
- (IBAction) cancel {
[[self parentViewController] dismissModalViewControllerAnimated:NO];
}
在大多數情況下,UIKit類不是線程安全的,他們只能從主線程中使用。在後臺執行的長時間運行的任務通常會調用[performSelectorOnMainThread:withObject:waitUntilDone:](http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html #// apple_ref/occ/instm/NSObject/performSelectorOnMainThread:withObject:waitUntilDone :)更新UI。 – albertamg