次のメッセージは、または[viewController action:selector]
という実際の呼び出しでrespondsToSelector
のテストに合格しますが、SIGABRT
になります。スタックトレースは 'NSInvalidArgumentException、reason: - [MyViewControllerセレクタ]:認識できないセレクタ'を示します。セレクタとNSSelectorFromStringを使用してオブジェクトにメッセージを送信
[viewController @selector(selector)]
コンパイルエラーが発生します(エラー: 'セレクタ'の前に ':'が必要です)。
セレクタをハードコードすると、すべて正常に動作します。
セレクタを使用してメッセージをオブジェクトに送信するにはどうすればよいですか?
-(void) notifyViewControllers:(NSString*) message
{
if(!message) return;
SEL selector = NSSelectorFromString(message);
if(!selector) return;
NSArray* viewControllers = [self.tabBarController viewControllers];
if(!viewControllers) return;
for (UIViewController* viewController in viewControllers)
{
if(!viewController) continue;
if ([viewController respondsToSelector:selector]) {
// [viewController selector];
[viewController action:selector];
}
}
}
感謝ウラジミールを。 Rakeshはそれを打ち負かしました(performSelector) - あなたのものは正確に正しいものでした。 – jww