当调用UI
ImagePickerController来使用相机时,我有问题.有时,但通常比没有,预览屏幕显示为黑色(因为相机本身被覆盖).在做了一些研究之后,似乎没有正确委派的人.但是,我相信我的设置是正确的.重新启动应用程序是什么修复它.
在我的.h文件中,我已经包含了UIImagePickerControllerDelegate和UINavigationControllerDelegate.
- (IBAction)camera:(id)sender { UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; #if TARGET_IPHONE_SIMULATOR imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; #else imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; #endif imagePickerController.editing = YES; imagePickerController.delegate = self; [self presentViewController:imagePickerController animated:YES completion:nil]; }
任何想法为什么会发生这种情况?
谢谢
解决方法
我刚刚打了这个问题一天半,肯定我在做主要线程之外的UI相关的东西.在我的情况下,我正在更新异步Web服务调用的响应处理代码中的标签.
在具有几个视图控制器的应用程序中,每个视图控制器都有2000行代码,这种事情可能很难跟踪.这是终于带给我我的答案,非常快.
https://gist.github.com/steipete/5664345
这个家伙张贴了一个类,你可以下载并添加到你的项目.只需将其添加到您的项目中,您就不需要在任何地方使用它,或尝试在任何地方实例化,只需将其添加到您的项目中即可.他还说,你应该运行这个没有ARC.为此,请转到“构建阶段”选项卡,展开“编译源”,双击该文件,然后键入-fno-objc-arc
现在,运行您的项目并导航到您正在体验黑色图像预览屏幕.如果所有的计划,在某个时间点之前,您的应用程序应该崩溃并转储到控制台一些关于在主线程外部执行UIKit操作的信息.根据您的应用程序正在做什么以及什么被转储到控制台,您应该可以很快找到一行代码导致您的麻烦.在我的情况下,我可以使用a调用我的响应处理程序
[self performSelectorOnMainThread:@selector(handleResponse:) withObject:data waitUntilDone:true];
我的问题立即消失了
此外,这个问题只有在我更新到iOS 7时才开始,我从未在iOS 5或iOS 6中看到这一点.
发布该文件的人建议您不将该应用程序与您的项目中包含的该文件一起发送,我非常同意这一点.
快乐调试!