我已经编写了一个 UITabBarController
子类(称为 MainViewController
)并添加了一些实例变量,特别是 Venue 类型的场所。 MainViewController
的每个选项卡都需要访问 MainViewController
的 field 变量。在第一个选项卡中,一个名为 HomeViewController
的 UIViewController
子类,我编写了我的 viewDidLoad
方法并尝试使用两者输出到 NSLog...
NSLog(@"%@", self.parentViewController.venue.name);
和
NSLog(@"%@", self.tabBarController.venue.name);
但是 XCode 给出了错误
error: request for member 'venue' in something not a structure or union
我可以从 MainViewController
中访问 venue 属性,所以已经排除了那里的错误。 iPhone 模拟器确实将 self.parentViewController
和 self.tabBarController
都视为 MainViewController
的实例。这条线...
NSLog(@"%@", self.tabBarController);
输出...
2009-06-05 17:54:46.502 Venue[29729:20b] <MainViewController: 0x536600>
因为它被视为一个 MainViewController
实例,我怀疑使用转换是否有帮助。是我使用 field 副本初始化 HomeViewController
的唯一其他选择,还是我只是在使用“self.parentViewController.venue.name
”做一些完全错误的事情?谢谢,罗布
最佳答案
你做的事情完全错了。 parentViewController
声明为 UIViewController
。 NSLog
由于多态性的奇迹,它输出它的真实类型。
UIViewController
没有 Venue
成员。您的 MainViewController
可以。事实上,类型转换它是正确的答案。确保同时导入 MainViewController.h
。
#import "MainViewController.h"
[...]
NSString *name = ((MainViewController *)self.parentViewController)).venue.name;
当然,还要确保 venue
声明为 MainViewController 的 @property
,name
是 @
。Venue
的属性
关于objective-c - 访问父 View Controller (自定义)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/956990/