我目前使用-respondsToSelector:
像这样:RespondsToSelector返回一个假阴性?
if (![moviePlayer respondsToSelector:@selector(currentPlaybackTime)]) {
NSLog(@"Cannot get current playbackTime on %@", moviePlayer);
return;
}
其中moviePlayer是一个实例化的MPMoviePlayerController对象。我做了很多其他类似的选择器检查,所以我知道几乎所有其他工作都正常,但由于某种原因,此respondsToSelector检查返回false,即使如果我做类似time = [moviePlayer currentPlaybackTime]
,它工作正常。这是在iOS 4.0以上,所以没有理由返回false。
为什么会出现这种情况?
的MPMoviePlayerController也符合MPMediaPlayback协议为3.2。 CurrentPlaybackTime是该协议中必需的属性,这意味着MPMoviePlayerController必须从3.2开始实现这些方法。总而言之,currentPlaybackTime是一个公共属性,它有一个访问器(这简直就是-currentPlaybackTime)。它是否有文件记录也无关紧要; [moviePlayer currentPlaybackTime]确实用有效的返回值进行响应,但该选择器的respondsToSelector返回NO。它的记录不会改变它是否实施。 – 2010-11-17 22:27:18
我很惊讶Apple没有在MPMoviePlayerController类的引用中发布协议构造。一个问题 - 为什么你检查'respondsToSelector'如果该实例符合该协议? – 2010-11-17 22:34:48
是的,这真的很奇怪。但是,它在MPMoviePlayerController的公共.h文件中。我正在检查respondsToSelector,因为它是一个只能从3.2开始可用的方法。我的应用程序支持到3.0,所以我必须检查它以避免运行时异常。 – 2010-11-17 22:41:29