Xcode-viewDidLoad方法不工作

Xcode-viewDidLoad方法不工作,xcode,viewdidload,Xcode,Viewdidload,我不熟悉Objective-c和Xcode,但我相信我对它了解得足够多,以至于意识到这里出了问题。我有一个使用故事板的应用程序,应用程序中的一个视图没有运行viewDidLoad方法。我不确定这是否相关,但我最近不小心删除了我原来的故事板,不得不制作另一个。原来的工作很好,没有问题,但当我使用新的,它不工作。该视图也是选项卡栏控制器的第一个视图,这可能是问题的一部分 以下是负责视图(.h)的类的代码: 在if语句中,被调用的外部整数(gTome)被设置为前一个视图中的一个数字。任何帮助都将是巨大

我不熟悉Objective-c和Xcode,但我相信我对它了解得足够多,以至于意识到这里出了问题。我有一个使用故事板的应用程序,应用程序中的一个视图没有运行viewDidLoad方法。我不确定这是否相关,但我最近不小心删除了我原来的故事板,不得不制作另一个。原来的工作很好,没有问题,但当我使用新的,它不工作。该视图也是选项卡栏控制器的第一个视图,这可能是问题的一部分

以下是负责视图(.h)的类的代码:


在if语句中,被调用的外部整数(gTome)被设置为前一个视图中的一个数字。任何帮助都将是巨大的,我为我的编码的简单性道歉。

如果它没有调用
viewDidLoad
,那么首先要检查的是,在您的故事板中,您已经正确地将
TabSynth
设置为视图控制器的自定义类。另外,我在
viewDidLoad
方法中没有看到
NSLog
。你怎么知道没有人叫它

顺便问一下,您知道可以将非UI对象放在nib或故事板中吗?我认为这可能有助于简化代码。例如,可以将类
ElementViews
定义为:

- (void)configureElementViews:(ElementViews *)elementViews state:(int)state {
    if (state > 0) {
        elementViews.tome.hidden = NO;
        elementViews.tome1.hidden = YES;
        elementViews.synthButton.hidden = NO;
    }
}

- (void)viewDidLoad {
    extern int gTomeAir;
    extern int gTomeDark;
    extern int gTomeEarth;
    extern int gTomeFire;
    extern int gTomeLight;
    extern int gTomeWater;
    extern int gAmoebaeNum;
    extern int gLarvaeNum;

    synthButtonAmoeb.hidden=YES;
    synthButtonAmoeb1.hidden=NO;
    synthButtonLarv.hidden=YES;
    synthButtonLarv1.hidden=NO;

    [self configureElementViews:self.waterViews state:gTomeWater];
    [self configureElementViews:self.fireViews state:gTomeFire];
    [self configureElementViews:self.airViews state:gTomeAir];
    [self configureElementViews:self.earthViews state:gTomeEarth];
    [self configureElementViews:self.darkViews state:gTomeDark];
    [self configureElementViews:self.lightViews state:gTomeLight];
}
元素视图 然后在您的
TabSynth
类中,不是每个元素有三个插座,而是只有一个插座:

TabSynth.h 在情节提要中,将一个通用“对象”(看起来像橙色立方体)拖动到
TabSynth
场景中。将其自定义类更改为
元素视图
,将其标识标签更改为
水视图
。将
TabSynth
waterview
出口连接到这个新的
elementview
对象,并将
elementview
对象的出口连接到三个waterview(
tome
tome1
图像视图和
synth按钮)。对其他五个元素重复上述步骤

然后您可以简化
viewDidLoad
方法,如下所示:

- (void)configureElementViews:(ElementViews *)elementViews state:(int)state {
    if (state > 0) {
        elementViews.tome.hidden = NO;
        elementViews.tome1.hidden = YES;
        elementViews.synthButton.hidden = NO;
    }
}

- (void)viewDidLoad {
    extern int gTomeAir;
    extern int gTomeDark;
    extern int gTomeEarth;
    extern int gTomeFire;
    extern int gTomeLight;
    extern int gTomeWater;
    extern int gAmoebaeNum;
    extern int gLarvaeNum;

    synthButtonAmoeb.hidden=YES;
    synthButtonAmoeb1.hidden=NO;
    synthButtonLarv.hidden=YES;
    synthButtonLarv1.hidden=NO;

    [self configureElementViews:self.waterViews state:gTomeWater];
    [self configureElementViews:self.fireViews state:gTomeFire];
    [self configureElementViews:self.airViews state:gTomeAir];
    [self configureElementViews:self.earthViews state:gTomeEarth];
    [self configureElementViews:self.darkViews state:gTomeDark];
    [self configureElementViews:self.lightViews state:gTomeLight];
}

如果它没有调用
viewDidLoad
,那么首先要检查的是,在故事板中,您已经正确地将
TabSynth
设置为视图控制器的自定义类。另外,我在
viewDidLoad
方法中没有看到
NSLog
。你怎么知道没有人叫它

顺便问一下,您知道可以将非UI对象放在nib或故事板中吗?我认为这可能有助于简化代码。例如,可以将类
ElementViews
定义为:

- (void)configureElementViews:(ElementViews *)elementViews state:(int)state {
    if (state > 0) {
        elementViews.tome.hidden = NO;
        elementViews.tome1.hidden = YES;
        elementViews.synthButton.hidden = NO;
    }
}

- (void)viewDidLoad {
    extern int gTomeAir;
    extern int gTomeDark;
    extern int gTomeEarth;
    extern int gTomeFire;
    extern int gTomeLight;
    extern int gTomeWater;
    extern int gAmoebaeNum;
    extern int gLarvaeNum;

    synthButtonAmoeb.hidden=YES;
    synthButtonAmoeb1.hidden=NO;
    synthButtonLarv.hidden=YES;
    synthButtonLarv1.hidden=NO;

    [self configureElementViews:self.waterViews state:gTomeWater];
    [self configureElementViews:self.fireViews state:gTomeFire];
    [self configureElementViews:self.airViews state:gTomeAir];
    [self configureElementViews:self.earthViews state:gTomeEarth];
    [self configureElementViews:self.darkViews state:gTomeDark];
    [self configureElementViews:self.lightViews state:gTomeLight];
}
元素视图 然后在您的
TabSynth
类中,不是每个元素有三个插座,而是只有一个插座:

TabSynth.h 在情节提要中,将一个通用“对象”(看起来像橙色立方体)拖动到
TabSynth
场景中。将其自定义类更改为
元素视图
,将其标识标签更改为
水视图
。将
TabSynth
waterview
出口连接到这个新的
elementview
对象,并将
elementview
对象的出口连接到三个waterview(
tome
tome1
图像视图和
synth按钮)。对其他五个元素重复上述步骤

然后您可以简化
viewDidLoad
方法,如下所示:

- (void)configureElementViews:(ElementViews *)elementViews state:(int)state {
    if (state > 0) {
        elementViews.tome.hidden = NO;
        elementViews.tome1.hidden = YES;
        elementViews.synthButton.hidden = NO;
    }
}

- (void)viewDidLoad {
    extern int gTomeAir;
    extern int gTomeDark;
    extern int gTomeEarth;
    extern int gTomeFire;
    extern int gTomeLight;
    extern int gTomeWater;
    extern int gAmoebaeNum;
    extern int gLarvaeNum;

    synthButtonAmoeb.hidden=YES;
    synthButtonAmoeb1.hidden=NO;
    synthButtonLarv.hidden=YES;
    synthButtonLarv1.hidden=NO;

    [self configureElementViews:self.waterViews state:gTomeWater];
    [self configureElementViews:self.fireViews state:gTomeFire];
    [self configureElementViews:self.airViews state:gTomeAir];
    [self configureElementViews:self.earthViews state:gTomeEarth];
    [self configureElementViews:self.darkViews state:gTomeDark];
    [self configureElementViews:self.lightViews state:gTomeLight];
}

可以,但在编写创建
-viewDidLoad
派生版本的超级代码之前,必须在方法
-viewDidLoad
的开头编写
[super viewDidLoad]
,以调用
控制器本身(对象层次结构中的父对象或其前身)的
viewDidLoad


瞧,祝你好运。

好的,但是你必须在方法
-viewDidLoad
的开头写
[super-viewDidLoad]
来调用
控制器本身的
viewDidLoad
(对象层次结构中的父对象或其前身)在编写创建
-viewDidLoad
派生版本的超级代码之前


瞧,祝你好运。

非常感谢你对我问题的帮助,我没想到会得到这么多反馈。起初我还没有意识到我可以在iOS应用程序中使用NSLog。查看应用程序后,我意识到正在调用viewDidLoad,问题是外部变量gTomeAir。。。没有被设定。结果表明,在运行设置视图的方法之前,视图已被切换。特别感谢您在简化我的代码方面提供的额外帮助,我一定会尝试一下:D非常感谢您对我的问题的帮助,我没想到会得到这么多反馈。起初我还没有意识到我可以在iOS应用程序中使用NSLog。查看应用程序后,我意识到正在调用viewDidLoad,问题是外部变量gTomeAir。。。没有被设定。结果表明,在运行设置视图的方法之前,视图已被切换。特别感谢您在简化代码方面提供的额外帮助,我一定会尝试一下:D
- (void)configureElementViews:(ElementViews *)elementViews state:(int)state {
    if (state > 0) {
        elementViews.tome.hidden = NO;
        elementViews.tome1.hidden = YES;
        elementViews.synthButton.hidden = NO;
    }
}

- (void)viewDidLoad {
    extern int gTomeAir;
    extern int gTomeDark;
    extern int gTomeEarth;
    extern int gTomeFire;
    extern int gTomeLight;
    extern int gTomeWater;
    extern int gAmoebaeNum;
    extern int gLarvaeNum;

    synthButtonAmoeb.hidden=YES;
    synthButtonAmoeb1.hidden=NO;
    synthButtonLarv.hidden=YES;
    synthButtonLarv1.hidden=NO;

    [self configureElementViews:self.waterViews state:gTomeWater];
    [self configureElementViews:self.fireViews state:gTomeFire];
    [self configureElementViews:self.airViews state:gTomeAir];
    [self configureElementViews:self.earthViews state:gTomeEarth];
    [self configureElementViews:self.darkViews state:gTomeDark];
    [self configureElementViews:self.lightViews state:gTomeLight];
}