ios - EXC_BAD_ACCESS 在停止 MPMoviePlayerController 时崩溃

标签 ios objective-c video

我在尝试停止通过 MPMoviePlayerController 播放的视频时遇到一些 EXC_BAD_ACCESS 问题。这是一些代码:

视频类:

@interface MyVideo()
@property (nonatomic, strong) MPMoviePlayerController * videoController
@end

@implementation MyVideo
@synthesize videoController;

- (MyVideo*) initIntoView: (UIView*) view withContent (NSDictionary*) contentDict {
    self=[super init];
    NSString * rawUrl=[[NSString alloc] initWithFormat:@"http://.../%@.mp4", [contentDict objectForKey:@"filename"]];
    NSURL * videoUrl=[[NSURL alloc] initWithString:rawUrl];
videoController = [[MPMoviePlayerController alloc] initWithContentURL:videoUrl];
    videoController.movieSourceType=MPMovieSourceTypeFile;
    videoController.view.frame = viewRef.bounds;
    [videoController.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
    videoController.controlStyle=MPMovieControlStyleNone;
    [view addSubview:videoController.view];
    return self;
}

/* other code */

- (void) stop {
    NSLog(@"video stop");
    [videoController stop];
}

@end

这个 MyVideo 类是我的 AppDelegate 类中的一个属性,如下所示:

@property (nonatomic, strong) MyVideo video;

我的 AppDelegate 类中的一行触发了此 MyVideo 类的公共(public)方法停止,如下所示:

[video stop];

通常 工作正常。但偶尔我会在 [videoController stop] 的行上收到 EXC_BAD_ACCESS 错误。它前面的行,上面带有 NSLog 的行,按预期输出到控制台。

当加载到 videoController 中的视频仍在播放时,会发生此崩溃。但并非每次都会发生。


谁能说明为什么会发生这种崩溃?我怀疑这是因为 videoController 已不在内存中,尽管它 strong 并且仍在使用中。

我是否认为绝对没有办法测试 videoController 以查看它是否仍在内存中?

我是否认为绝对没有办法强制 videoController 在用于播放视频时保留在内存中?

因此,当我不想再播放视频时,我不会尝试停止视频并正确关闭 MyVideo 类,我现在只想设置 MyVideo class 为 nil,让 ARC 处理停止视频并将其从内存中清除。这是这样做的正确方法吗?这样做会有什么缺点吗?

对于这个问题,我还缺少其他解决方案吗?

最佳答案

使用 EXC_BAD_ACCESS,我的第一个调用端口是在我的调试方案中启用僵尸对象。

这应该让您了解是什么对象导致了 EXC_BAD_ACCESS。只是为了仔细检查它是你的 videoController。

什么时候在 MyVideo 上调用你的停止函数

崩溃是否发生在特定设备上,iPad iPod,是否发生在特定操作系统的 iOS 6,7 上 是同一个视频文件吗?

它不能随机中断,一定有某种模式导致 EXC_BAD_ACCESS

关于ios - EXC_BAD_ACCESS 在停止 MPMoviePlayerController 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19841170/

相关文章:

iOS - 尝试实现动画时钟 : Unable to simultaneously satisfy constraints runtime error -noob level 99

ios - Swift:只允许用户对 TableViewCell 中的项目投票一次

iphone - 两个日期之间的范围的 NSPredicate 没有按预期工作

video - 如何使用 ffmpeg 从 YUV 视频中提取帧(或特定帧)

ios - 我如何使用 AVCaptureSession 和 swift (IOS 8)在 mpeg4 容器中录制 mp4 视频

ios - 动态更改动画 IOS 中的图像

ios - UICollectionView 项目顺序在从右到左的语言中不会颠倒

objective-c - 我什么时候应该释放 [NSMutableDictionary 字典] 创建的字典?

ios - Swift:在 touchesBegan/touchesEnded 中延迟双击

c# - 用于上传视频的YouTube数据API在MVC中不起作用