Мне трудно понять, при каких условиях 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];
}
... а затем получить представление из некоторых представлений следующим образом:
- (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 не будет готов и не отобразит видео. Кроме того, видео никогда не появляется (оно никогда не становится «готовым»). Кто-нибудь знает, что здесь происходит?