以下將通過respondsToSelector
測試,但SIGABRT
對[viewController selector]
或[viewController action:selector]
的實際調用。堆棧跟蹤狀態'NSInvalidArgumentException,原因: - [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];
}
}
}
感謝弗拉基米爾。拉克什擊敗你(performSelector) - 但你的確是正確的。 – jww