不输入我的构造函数

时间:2012-04-10 06:59:52

标签: objective-c ios

我在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;
    }

4 个答案:

答案 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方法的变体,如initWithNibNameinitWithframe

答案 3 :(得分:0)

您可以在创建VC的位置发布代码吗?如果你从XIB执行它将不会被调用,而不是你应该重写:

initWithNibName