Я пытаюсь добавить проигрывателя в свою камеру.Ошибка MPMoviePlayer в ячейках таблицы
Код:
- (MPMoviePlayerViewController*)setUp
{
MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
//.. setting frame etc
//not starting the player; no fancy set up, everything default.
return player;
}
В cellForRowAtIndexPath
:
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
cell.tag = indexPath.row;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
dispatch_async(queue, ^(void)
{
MPMoviePlayerViewController *player = [self setUp];
if (player)
{
dispatch_async(dispatch_get_main_queue(),^
{
if (cell.tag == indexPath.row)
{
[cell.contentView addSubview:player.view];
[cell setNeedsLayout];
}
});
}
});
}
Если я добавил его только лишь клетки, нет никаких проблем, если я добавил его к более чем одному скажем 10 или 20 , Я всегда получаю этот крах.
Ошибка:
* Assertion failure in -[MPMoviePlayerControllerNew _moviePlayerDidBecomeActiveNotification:], /SourceCache/MediaPlayer_Sim/MobileMusicPlayer-2526.83/SDK/MPMoviePlayerController.m:1351
* Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'movie player has wrong activation state (1)'
Полный след:
0 CoreFoundation 0x01dcf1e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x0191c8e5 objc_exception_throw + 44
2 CoreFoundation
0x01dcf048 +[NSException raise:format:arguments:] + 1363 Foundation 0x014fc4de -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
4 MediaPlayer 0x00017450 -[MPMoviePlayerControllerNew _moviePlayerDidBecomeActiveNotification:] + 235
5 Foundation 0x015ef049 57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke + 40
6 CoreFoundation 0x01e2af04 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER + 20
7 CoreFoundation 0x01d82efb _CFXNotificationPost + 2859
8 Foundation 0x01528e41 -[NSNotificationCenter postNotificationName:object:userInfo:] + 98
9 MediaPlayer 0x0001a085 -[MPMoviePlayerControllerNew _postNotificationName:object:userInfo:] + 133
10 MediaPlayer 0x00019ff1 -[MPMoviePlayerControllerNew _postNotificationName:object:] + 67
11 MediaPlayer 0x000197b2 -[MPMoviePlayerControllerNew _ensureActive] + 199
12 MediaPlayer 0x00014962 -[MPMoviePlayerControllerNew prepareToPlay] + 85
13 MediaPlayer 0x00012ccd -[MPMoviePlayerController prepareToPlay] + 42
14 MediaPlayer 0x00082c77 -[MPMoviePlayerViewController loadView] + 335
15 UIKit 0x006fb0d3 -[UIViewController loadViewIfRequired] + 78
16 UIKit 0x006fb5d9 -[UIViewController view] + 35
17 MyTableView 0x0000381f -[MyTableViewTableViewController prepareStreams] + 159
18 MyTableView 0x00004115 __72-[MyTableViewTableViewController tableView:cellForRowAtIndexPath:]_block_invoke + 53 19 libdispatch.dylib 0x044c17b8 _dispatch_call_block_and_release + 15
20 libdispatch.dylib 0x044d64d0 _dispatch_client_callout + 14
21 libdispatch.dylib
0x044c4eb7 _dispatch_root_queue_drain + 291
22 libdispatch.dylib 0x044c5127 _dispatch_worker_thread2 + 39
23 libsystem_pthread.dylib 0x04805dab _pthread_wqthread + 336
24 libsystem_pthread.dylib 0x04809cce start_wqthread + 30 ) libc++abi.dylib: terminating with uncaught exception of type NSException
Я перепробовал все решения я мог бы найти на SO, но ни один не работает. Я даже не запускаю игрока в клетках. Принимал меня часами. Начался как забавный проект, который оказался головной болью. Но мне очень нравится знать, почему и что здесь не так.
Спасибо за ответ; помогите объяснить, почему? Похоже, что это превосходит цель использования 'async', если я помещаю все в основную очередь. – Unheilig