我有这个有委托方法的类。它的代理人有一个navigationController。
我正在尝试从该类内部向此navigationController发送消息。类似的东西:
[delegate.navigationController setNavigationBarHidden:NO];
我收到消息:错误:访问未知'navigationController'getter方法
当我在委托中时,我可以使用
访问其navigationControllerself.navigationController
如何在该类上设置getter,这样可行?
感谢。
答案 0 :(得分:2)
navigationController
是典型UIViewController的属性。如果将delegate
强制转换为UIViewController *,则错误将消失:
[((UIViewController *)delegate).navigationController setNavigationBarHidden:NO];
请注意,您最好确保delegate
确实是UIViewController实例。否则,您的应用会崩溃。
编辑:在我的脑海中,有三种方法可以使用上面的示例来转换C指针:
((UIViewController *) delegate).navigationController;
为什么嵌套大括号?由于运算符优先级,(UIViewController *) delegate.navigationController
等同于(UIViewController *) (delegate.navigationController)
。
[(UIViewController *) delegate navigationController];
这里我们只是将委托转换为UIViewController并向其发送消息。
UIViewController *myViewController = (UIViewController *) delegate;
[myViewController navigationController]; // or myViewController.navigationController;
所有这些功能都相同。我会走出去,说这是一个风格问题,可以选择。
答案 1 :(得分:0)
调用此方法的类中委托的类型是什么。如果它是id
那么这就是为什么它不知道navigationController方法。如果每次都相同,你可以将委托转换为它真正的类,并导入该类头文件,以便它知道有一个成员navigationController。您也可能没有将navigationController设置为委托文件中的属性。