Я просмотрел каждый заданный вопрос по этой теме, но ни один из них не дал мне решения. Мой проект в значительной степени реплицирует демонстрационное приложение AVPlayer в библиотеке разработчика (без возможности очистки): у меня есть копия и вставка класса AVPlayerDemoPlaybackView
(переименованный в YOPlaybackView
) и связанный с ним контроллер, а также очень похожий xib (без ползунка) . Мой код контроллера представления очень точно следует шаблону в демонстрации (различия кода указаны ниже для краткости).
Я убедился, что контроллер представления является владельцем файла.
Я убедился, что розетки не дублируются
Я проверил, является ли контроллер представления допустимым экземпляром, поставив точку останова в
dealloc
Ошибка возникает в методе
observeValueForKeyPath
при изменении / изменении текущего элемента для плеера. Следующая строка выдает ошибку - [UIView SetPlayer:]: неопознанный селектор отправлен в экземпляр ...[playbackView setPlayer:player];
Если я создаю экземпляр этого представления непосредственно перед этим вызовом, я не получаю сообщение об ошибке:
YOPlaybackView* vw = [[YOPlaybackView alloc] init];
[playbackView setPlayer:player];
Мне кажется, что это может быть связано с ленивой загрузкой пера (и создание экземпляра запускает его в жизнь).
Глядя в окно отладчика, кажется, чтоplayView действителен с дополнительной строкой, которая создает (неиспользуемый) экземпляр, и без нее.
Может ли кто-нибудь помочь улучшить мои знания о жизненном цикле объекта / приложения?
Изменить - в ответ на предложенный ответ, содержащий комментарий ИБ
Это снимок IB, показывающий иерархию представлений и правильно названный настраиваемый вид в инспекторе.
Изменить - в ответ на вопрос о действующем SetPlayer
Рассматриваемый класс представления выглядит так:
@class AVPlayer;
@interface YOPlaybackView : UIView
@property (nonatomic, retain) AVPlayer* player;
- (void)setPlayer:(AVPlayer*)player;
@end
и подразумевают:
@implementation YOPlaybackView
+ (Class)layerClass
{
return [AVPlayerLayer class];
}
- (AVPlayer*)player
{
return [(AVPlayerLayer*)[self layer] player];
}
- (void)setPlayer:(AVPlayer*)player
{
[(AVPlayerLayer*)[self layer] setPlayer:player];
}
@end
Правка - вывод журнала
2013-07-23 12:05:39.084 iOSVideoPlayerExample[8331:14003] Unknown class YOPlaybackView in Interface Builder file.
2013-07-23 12:05:39.956 iOSVideoPlayerExample[8331:14003] Unbalanced calls to begin/end appearance transitions for <YOMasterViewController: 0x985aa10>.
2013-07-23 12:05:40.428 iOSVideoPlayerExample[8331:14003] <UIView: 0x8383900; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x8381710>>
2013-07-23 12:05:40.429 iOSVideoPlayerExample[8331:14003] -[UIView setPlayer:]: unrecognized selector sent to instance 0x8383900
(lldb)
setPlayer
метод в вашемYOPlaybackView
подклассе? - person Rog   schedule 23.07.2013YOPlaybackView * playbackView = ....
- person Felix Lamouroux   schedule 23.07.2013playbackView
не указывает на экземплярYOPlaybackView
. - person Felix Lamouroux   schedule 23.07.2013[audioPlayer prepareToPlay]
, а затем немедленно освобождаю его, время загрузки для всех остальных моих аудио очень близко к незаметному. Итак, теперь я делаю это в applicationDidFinishLaunching, а все остальное работает хорошо. - person 9to5ios   schedule 23.07.2013