Ios 在UITableViewCell中播放MPMoviePlayerController会导致应用程序冻结和崩溃

Ios 在UITableViewCell中播放MPMoviePlayerController会导致应用程序冻结和崩溃,ios,uitableview,mpmovieplayercontroller,Ios,Uitableview,Mpmovieplayercontroller,在我正在使用的一个应用程序中,我们正在将一个MPMovePlayerController添加到UITableViewCell中,然后自动播放它。问题是,调用prepareToPlay和/或play会导致应用程序冻结,CPU最大化,RAM持续增加,应用程序当然会在一段时间后崩溃。如果我注释掉了prepareToPlay和play,但没有出现,但我看到的只是一个没有播放控件的黑框 我们在cellForRowAtIndexPath中创建MPMoviePlayerController,并将其存储到一个数

在我正在使用的一个应用程序中,我们正在将一个
MPMovePlayerController
添加到
UITableViewCell
中,然后自动播放它。问题是,调用
prepareToPlay
和/或
play
会导致应用程序冻结,CPU最大化,RAM持续增加,应用程序当然会在一段时间后崩溃。如果我注释掉了
prepareToPlay
play
,但没有出现,但我看到的只是一个没有播放控件的黑框

我们在
cellForRowAtIndexPath
中创建
MPMoviePlayerController
,并将其存储到一个数组中,因为表中可能有多个视频,需要能够在点击一个或按需停止一个时播放正确的视频。第一次加载表时,视频加载和播放不会出现问题。用户可以通过模态视图控制器演示文稿添加视频,该演示文稿将在将视频添加到数据源后重新加载表。只有在用户添加新视频后,问题才会出现

我尝试将玩家的一个属性存储在单元格中,但这并没有解决问题。在设置
contentURL
之前,我试着调用
stop
,正如其他地方建议的那样,这也没有帮助。还尝试了4个不同的视频,每一个都有不同的格式,以防它是一个损坏的视频。我不确定是什么问题

//Table view controller:
@interface {
    NSMutableArray *arrayOfMoviePlayers;
}

viewDidLoad {
    arrayOfMoviePlayers = [NSMutableArray new];
}

cellForRowAtIndexPath {
    MyTableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc]init];
    [arrayOfMoviePlayers addObject:moviePlayer];

    cell = [[MyTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell" withDictionary:dict withMoviePlayer:moviePlayer];
    return cell;
}

//Cell subclass:
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier withDictionary:(NSDictionary*)dict withMoviePlayer:(MPMoviePlayer *)moviePlayer {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        moviePlayer.view.frame = self.contentView.bounds;
        [self.contentView addSubview:moviePlayer.view];

        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
            dispatch_async(queue, ^{
                NSString* fileURL = dict[@"video"][@"url"]; //may be remote or local
                dispatch_async(dispatch_get_main_queue(), ^{
                    [moviePlayer stop];
                    [moviePlayer setContentURL:[NSURL fileURLWithPath:fileURL]];

                    //next lines cause high CPU, RAM, eventual crash
                    [moviePlayer prepareToPlay];
                    [moviePlayer play];
                });

            });
    }
    return self;
}
事故的一些细节:

Crashed Thread:        0  Dispatch queue: com.apple.main-thread
Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_PROTECTION_FAILURE at 0x00007fff5291bd80

问题是由于视频文件的URL无效。虽然URL存在,但它不正确