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