AVCaptureVideoPreviewLayer在发布时崩溃应用程序

时间:2014-02-24 13:46:27

标签: ios avfoundation

我遇到了AVCaptureVideoPreviewLayer的问题。我这样创造它:

self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session];

session是我的AVCaptureSession对象。它已初始化。当我从视图控制器弹出时,我的应用程序崩溃。我甚至不使用这个vatiable,无论如何我都会崩溃。我得到EXC_BAD_ACCESS code = 1;。 self.previewLayer是我的类对象。我在我的类中声明,然后使用retain和nonatomic以及@synthesize创建它的属性。我使用来自RosyWritter的代码,唯一不同的是我使用AVCaptureVideoPreviewLayer。看起来我发布这个对象有问题。谁能告诉我我做错了什么?

修改

我终于解决了。我发现我没有取消注册videoOut委托:)

PS:我使用自动引用计数

1 个答案:

答案 0 :(得分:1)

您能否提供一些有关如何访问AVCaptureVideoPreviewLayer的详细信息。如果有,请粘贴崩溃日志。

请使用以下代码块尝试您的代码模拟。

if ([self captureManager] == nil) {
        captureManager = [[AVCamCaptureManager alloc] init];
        captureManager.delegate = self;



        if ([[self captureManager] setupSession] && _captureVideoPreviewLayer == nil) {
            // Create video preview layer and add it to the UI
            _captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:[[self captureManager] session]];       



            if ([_captureVideoPreviewLayer isOrientationSupported]) {
                [_captureVideoPreviewLayer setOrientation:AVCaptureVideoOrientationPortrait];
            }

            [_captureVideoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];


            // Start the session. This is done asychronously since -startRunning doesn't return until the session is running.
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                [[[self captureManager] session] startRunning];
            });
        }
    }

希望它有所帮助。如果我们必须采用其他解决方案,请检查并告知我们。