Iphone UITabBarController作为其子视图控制器的代理

Iphone UITabBarController作为其子视图控制器的代理,iphone,objective-c,delegates,interface-builder,Iphone,Objective C,Delegates,Interface Builder,我目前有一个故事板,其中有一个子类UITabBarController链接到3个视图控制器。 这些视图控制器是UIViewController的自定义子类,我添加了一个“委托”属性,因为我需要从主视图控制器(从.plist文件检索)访问属性(设置)。 它是一个设置类,处理从此文件的读写操作 无论如何,我还没有找到如何从IB设置其委托属性,因此我在代码中添加了以下内容: - (void)viewDidLoad { [super viewDidLoad]; /* Fetch set

我目前有一个故事板,其中有一个子类UITabBarController链接到3个视图控制器。 这些视图控制器是UIViewController的自定义子类,我添加了一个“委托”属性,因为我需要从主视图控制器(从.plist文件检索)访问属性(设置)。 它是一个设置类,处理从此文件的读写操作

无论如何,我还没有找到如何从IB设置其委托属性,因此我在代码中添加了以下内容:

- (void)viewDidLoad
{
    [super viewDidLoad];

    /* Fetch settings */
    NSString* settingsPath = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"plist"];   // Load settings from file
    settings = [[Settings alloc] initWithContentOfFile:settingsPath];

    for (UIViewController<HasDelegate> *c in [self viewControllers]) {
        c.delegate = self;
    }
}
-(void)viewDidLoad
{
[超级视图下载];
/*获取设置*/
NSString*settingsPath=[[NSBundle mainBundle]pathForResource:@“设置”的类型:@“plist”];//从文件加载设置
设置=[[settings alloc]initWithContentOfFile:settingsPath];
用于(UIViewController*c在[self-viewControllers]中){
c、 代表=自我;
}
}
但只有第一视图控制器(启动应用程序时显示的控制器)可以访问它。 另一个具有委托属性的nil指针

这样做对吗?
我遗漏了什么?

不管怎样,我访问的是UINavigationController,而不是它的rootViewController。我补充说:

if([c isKindOfClass:[UINavigationController class]]) {
    NSLog(@"UINavigationController");
    UINavigationController *navC = (UINavigationController*)c;
    [[[navC viewControllers] objectAtIndex:0] setDelegate:self];
}

它就像一个符咒

当你在
[self viewControllers]
中进行迭代时,你是真的得到了所有3个视图控制器,还是只得到了一个?实际上,我似乎检索到了每个视图控制器。我添加了
NSLog(@“%@”,c.title)并打印它们。我可以重读
c.delegate
,它指向
self
。但是,当我检查
c
的地址时,它与我在第二和第三视图控制器的
loadView
中的地址不一样。在选项卡栏控制器中的VCs之间转换时,你会做什么奇怪的事吗?或者您只是使用本机标准行为还是使用本机行为,我只需点击模拟器上的选项卡。