我遇到了AVCaptureVideoPreviewLayer的问题。我这样创造它:
self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session];
session是我的AVCaptureSession对象。它已初始化。当我从视图控制器弹出时,我的应用程序崩溃。我甚至不使用这个vatiable,无论如何我都会崩溃。我得到EXC_BAD_ACCESS code = 1;。 self.previewLayer是我的类对象。我在我的类中声明,然后使用retain和nonatomic以及@synthesize创建它的属性。我使用来自RosyWritter的代码,唯一不同的是我使用AVCaptureVideoPreviewLayer。看起来我发布这个对象有问题。谁能告诉我我做错了什么?
我终于解决了。我发现我没有取消注册videoOut委托:)
PS:我使用自动引用计数
答案 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];
});
}
}
希望它有所帮助。如果我们必须采用其他解决方案,请检查并告知我们。