1

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

4 回答 4

3

使用 init 方法初始化 UIViewController 没有意义。通常你需要- (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 不是您在 OO 课程中学习的“真正”构造函数。

于 2012-04-10T07:08:14.953 回答
1

UIViewController 文档中所述,UIViewController的指定初始化程序是initWithNibName:bundle:. 但取决于您的视图控制器是如何创建的(例如在代码中或作为故事板的一部分),它甚至可能不会被调用,它可能会被调用initWithCoder:

于 2012-04-10T07:08:00.587 回答
0

如果你使用笔尖。awakeFromNib方法将被调用。还要检查是否使用 init 方法的变体,如initWithNibName,initWithframe等。

于 2012-04-10T07:06:39.937 回答
0

您可以在创建 VC 的位置发布代码吗?如果您从 XIB 执行此操作,则不会调用 init,而是应该重新编写:

initWithNibName
于 2012-04-10T07:07:41.817 回答