настоящее время я использую -respondsToSelector:
так:RespondsTeSlector возвращает ложноотрицательный?
if (![moviePlayer respondsToSelector:@selector(currentPlaybackTime)]) {
NSLog(@"Cannot get current playbackTime on %@", moviePlayer);
return;
}
где MoviePlayer является проиллюстрированный объект MPMoviePlayerController. Я делаю много других подобных проверок селектора, поэтому я знаю, что в значительной степени все остальное работает нормально, но по какой-то причине эта реакция возвращает проверкуToSelector, возвращает false, даже если я делаю что-то вроде time = [moviePlayer currentPlaybackTime]
, он отлично работает. Это на 4.0+ iOS, поэтому нет причин для возврата false.
Любые причины, по которым это произойдет?
MPMoviePlayerController также соответствует протоколу MPMediaPlayback в 3,2. CurrentPlaybackTime является обязательным свойством в этом протоколе, что означает, что MPMoviePlayerController должен реализовать эти методы начиная с 3.2. В общем, currentPlaybackTime является общедоступным, у которого есть аксессор (который просто -currentPlaybackTime). Это также не имеет значения, если оно задокументировано или нет; [moviePlayer currentPlaybackTime] отвечает действительным возвращаемым значением, но отвечаетSoSelector для этого селектора возвращает NO. Он документируется, не меняет, реализовано это или нет. –
Я удивлен, что Apple не опубликовала эту протокольную конформацию в ссылке класса MPMoviePlayerController. Один вопрос - почему вы проверяете 'responsesToSelector', если этот экземпляр соответствует этому протоколу? –
Да, это действительно странно. Это, однако, в общедоступном файле .h для MPMoviePlayerController. Я проверяю responsesToSelector, потому что это метод, который стал доступен только начиная с 3.2. Мое приложение поддерживает до 3,0, поэтому я должен проверить его, чтобы избежать исключений во время выполнения. –