iPhone - 在类中访问未知的getter方法

时间:2011-02-05 18:49:11

标签: iphone

我有这个有委托方法的类。它的代理人有一个navigationController。

我正在尝试从该类内部向此navigationController发送消息。类似的东西:

[delegate.navigationController setNavigationBarHidden:NO];

我收到消息:错误:访问未知'navigationController'getter方法

当我在委托中时,我可以使用

访问其navigationController
self.navigationController

如何在该类上设置getter,这样可行?

感谢。

2 个答案:

答案 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设置为委托文件中的属性。

相关问题