Имам проблеми с разбирането при какви условия AVPlayer readyForDisplay би бил „ДА“ за локално съхранен видеоклип. Създавам приложение, чийто основен изглед има два подизгледа, всеки от които е персонализиран подклас на UIView, който съдържа AVPlayer и APPlayerLayer за показване на видео. Приложението превключва между показване на тези два подизгледа в отговор на въвеждане от потребителя. В моя контролер за основен изглед имам нещо подобно:
- (void)viewDidLoad
{
firstView = [VideoView alloc] initWithFileName:@"clip1.mov"]]; // VideoViews are assigend to instance variables
secondView = [VideoView alloc] initWithFileName:@"clip2.mov"]];
[[self view] addSubview:firstView];
}
Инициализирането на тези изгледи зарежда AVPlayer и създава AVPlayerLayer. Когато приложението се стартира, първият клип се показва правилно. В отговор на въведеното от потребителя второ видео се показва на мястото на първото, така:
- (void)responseToEvent
{
NSLog(@"%i", [targetView.readyForDisplay]); // prints out "1" in the console
[firstView removeFromSuperview];
[self.view addSubview:secondView];
}
Това работи добре. ОБАЧЕ, ако променя viewDidLoad, за да поставя secondView в NSMutableDictionary така:
- (void)viewDidLoad
{
firstView = [VideoView alloc] initWithFileName:@"clip1.mov"]];
VideoView *secondView = [VideoView alloc] initWithFileName:@"clip2.mov"]];
[someViews setObject: secondView forKey:viewIndex];
[[self view] addSubview: firstView];
}
... и по-късно извадете изгледа от someViews като този:
- (void)responseToEvent
{
VideoView *secondView = [neighborViews objectForKey:link.targetView.pftViewId];
NSLog(@"%i", [targetView.readyForDisplay]); // prints out "0" in the console
[firstView removeFromSuperview];
[self.view addSubview:secondView];
}
... това НЕ РАБОТИ. Няма показано видео. Не мога да разбера защо поставянето на съдържащия изглед в NSMutableDictionary би накарало AVPlayer да не е готов и да не показва видео. Освен това видеото никога не се появява (никога не става „готово“). Някой знае ли какво става тук?