Objective-C调用编译器不相信的选择器(即使我们知道它存在)

Ara*_*and 5 objective-c selector

我在prepareForSegue方法中有这个代码

    // Get destination view
    UIViewController *viewController = [segue destinationViewController];

    //See if it responds to a selector
    if ([viewController respondsToSelector:@selector(setSomethingOrOther:)]) {
        //if so call it with some data
        [viewController setSomethingOrOther:something];
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码意味着我不必包含对segue的视图控制器的实际类的引用.我可以更松散地耦合两个视图控制器,并检查它是否响应其上设置的某些属性.

问题是当我这样做时,我得到以下编译时错误:

'UIViewController'没有可见的@interface声明选择器'setSomethingOrOther:'

这当然是真的.我知道我可以通过包含对视图的引用来解决它,但我更愿意将它保持分离.我该如何解决这个问题呢?

Mat*_*ias 11

使用该performSelector:aSelector方法,然后您可以调用未声明的选择器.


Fel*_*lix 7

[viewController performSelector:@selector(setSomethingOrOther:) 
                     withObject:something];
Run Code Online (Sandbox Code Playgroud)