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

UIViewController を init メソッドで初期化しても意味がありません。あなたが必要とする通常- (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:. ただし、View Controller の作成方法 (コード内またはストーリーボードの一部など) によっては、これが呼び出されない場合や、initWithCoder:代わりに呼び出される場合があります。

于 2012-04-10T07:08:00.587 に答える
0

ニブを使用している場合。awakeFromNibメソッドが呼び出されます。initWithNibNameまた、 、initWithframeなどの init メソッドのバリアントを使用するかどうかも確認してください。

于 2012-04-10T07:06:39.937 に答える
0

VC を作成するコードを投稿できますか? XIB から実行する場合、init は呼び出されません。その代わりに、次のように書き直してください。

initWithNibName
于 2012-04-10T07:07:41.817 に答える