在我的多标签应用程序中,线程关心监听来自服务器的消息,并且必须能够关闭UIImagePickerController以防相机在接收到特定消息时处于活动状态。该线程通过NSThread detachNewThreadSelector运行。
我设法通过ApplicationDelegate在线程端调用正确的调用序列,但是拾取器没有被解除:
- (void) closeCameraController {
[cameraTabController closeSubViewCamera]; // Invokes cancel: on the cameraSubView.
}
当我通过映射在相机覆盖图按钮上的事件(“取消”按钮)启动它时,相同的序列正常工作:
- (IBAction) cancel {
[[self parentViewController] dismissModalViewControllerAnimated:NO];
}
答案 0 :(得分:1)
来自Apple's Docs:
注意:在大多数情况下,UIKit类只能用于 应用程序的主要线程。对于课程尤其如此 源自UIResponder或涉及操纵你的 应用程序的用户界面。
您可以使用NSObject的performSelectorOnMainThread:withObject:waitUntilDone:
- (void) closeCameraController {
[cameraTabController performSelectorOnMainThread:@selector(closeSubViewCamera)
withObject:nil
waitUntilDone:YES];
}