我在xcode 4.3中使用选项卡式视图应用程序。
我只是想尝试初始化我在FirstViewController的.h文件中声明的一些变量。我通过在我的.m文件中创建一个构造函数来尝试这个。
.h文件:
#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController {
IBOutlet UITextField *currentGuess;
IBOutlet UILabel *attemptsMade;
IBOutlet UILabel *attemptsLeft;
IBOutlet UITextView *hints;
int numberToGuess;
int numberOfGuessesMade;
int maxGuesses;
int maxGenNumber;
NSMutableArray *allGuesses;
}
- (id) init;
@end
.m文件
#import "FirstViewController.h"
@interface FirstViewController ()
@end
@implementation FirstViewController
- (id) init {
NSLog(@"entered constructor!");
if(self = [super init])
{
numberToGuess = 0;
numberOfGuessesMade = 0;
maxGuesses = 3;
maxGenNumber = 10;
}
return self;
}
答案 0 :(得分:3)
使用init方法初始化UIViewController没有意义。
Normaly你需要- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
如果你从XIB文件构建它,那么就像这样
您需要将初始化代码放在 - (void)awakeFromNib
或-(void)viewDidLoad
。
你的情况就是这样的
@implementation FirstViewController
- (id) awakeFromNib {
NSLog(@"entered XIB constructor!");
numberToGuess = 0;
numberOfGuessesMade = 0;
maxGuesses = 3;
maxGenNumber = 10;
}
如果非xib则:
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
NSLog(@"entered constructor!");
if(self = [super initWithNibName:nibName bundle:nibBundle])
{
numberToGuess = 0;
numberOfGuessesMade = 0;
maxGuesses = 3;
maxGenNumber = 10;
}
return self;
}
请记住。 init不是真正的&#34;您将在OO课程中学习构造函数。
答案 1 :(得分:1)
如UIViewController documentation所述,UIViewController的指定初始值设定项为initWithNibName:bundle:
。但是,根据视图控制器的创建方式(例如,在代码中或作为故事板的一部分),甚至可能不会调用它,而是可能initWithCoder:
。
答案 2 :(得分:0)
如果您正在使用笔尖。将调用awakeFromNib
方法。还要检查是否使用init方法的变体,如initWithNibName
,initWithframe
等
答案 3 :(得分:0)
您可以在创建VC的位置发布代码吗?如果你从XIB执行它将不会被调用,而不是你应该重写:
initWithNibName