Iphone AVCaptureSession从后台返回时失败

Iphone AVCaptureSession从后台返回时失败,iphone,ios,uiview,avcapturesession,Iphone,Ios,Uiview,Avcapturesession,我有一个相机预览窗口,90%的时间都能正常工作。但是,有时,当返回到我的应用程序(如果它位于后台)时,预览将不会显示。这是我在视图加载时调用的代码: - (void) startCamera { session = [[AVCaptureSession alloc] init]; session.sessionPreset = AVCaptureSessionPresetPhoto; AVCaptureVideoPreviewLayer *captureVideoPreviewLayer =

我有一个相机预览窗口,90%的时间都能正常工作。但是,有时,当返回到我的应用程序(如果它位于后台)时,预览将不会显示。这是我在视图加载时调用的代码:

- (void) startCamera {

session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetPhoto;

AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
captureVideoPreviewLayer.frame = _cameraView.bounds;
[_cameraView.layer addSublayer:captureVideoPreviewLayer];
captureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
captureVideoPreviewLayer.position=CGPointMake(CGRectGetMidX(_cameraView.bounds), 160);

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;

AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (!input) {

    NSLog(@"ERROR: %@", error);


    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Important!"
                                                    message:@"Unable to find a camera."
                                                   delegate:nil
                                          cancelButtonTitle:@"Ok"
                                          otherButtonTitles:nil];
    [alert show];
    [alert autorelease];
}

[session addInput:input];

stillImage = [[AVCaptureStillImageOutput alloc] init];
NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys:AVVideoCodecJPEG , AVVideoCodecKey, nil];
[stillImage setOutputSettings:outputSettings];

[session addOutput:stillImage];
[session startRunning];
}

如果发生这种情况,我可以切换到我的首选项视图,然后再切换回来,al很好,但这是一个讨厌的bug,我想杀死它。预览窗口是我的故事板中的UIView。

不要在加载视图时启动捕获会话,而是在ViewWillDisplay上启动它,在viewWillDissapear上停止它

应用程序在后台时,视图控制器似乎正在清理一些内存。请确保在初始化捕获会话时牢记这一点


用私有属性getter方法而不是start方法惰性地分配会话,这样可以避免内存泄漏。

谢谢,我会这样做,并测试几个小时:)等等-难道不是这样的情况,
视图将出现
/
消失
仅在应用程序中场景移动时调用:它们不会在应用程序进出前台时调用吗?是否需要注册
UIApplicationWillResignActiveNotification
并使用它?