3

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

视频类:

@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,如下所示:

[video stop];

通常工作正常。但有时我会EXC_BAD_ACCESS[videoController stop]. 它前面的那一行,上面的那一行,NSLog按预期输出到控制台。

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


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

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

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

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

我缺少这个问题的其他解决方案吗?

4

2 回答 2

1

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

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

什么时候在 MyVideo 上调用您的停止功能

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

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

于 2013-11-07T16:39:25.707 回答
1

我可能错了,但我觉得这是一个线程问题。我怀疑调用该[myVideo stop]函数的线程不知道 videoController(可能在主线程上初始化)。[videoController stop]尝试使用以下方法在主线程中调用:

dispatch_async(dispatch_get_main_queue(), ^{
       [videoController stop];
    });

请让我知道这是否有效!

于 2013-11-07T16:46:27.567 回答