ios – UIImagePickerController显示黑色预览屏幕

调用UI ImagePickerController来使用相机时,我有问题.有时,但通常比没有,预览屏幕显示为黑色(因为相机本身被覆盖).在做了一些研究之后,似乎没有正确委派的人.但是,我相信我的设置是正确的.重新启动应用程序是什么修复它.

在我的.h文件中,我已经包含了UIImagePickerControllerDelegate和UINavigationControllerDelegate.

这是.m文件代码

- (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中看到这一点.

发布该文件的人建议您不将该应用程序与您的项目中包含的该文件一起发送,我非常同意这一点.

快乐调试!

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...