我目前使用-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