1

MainMenu.xib があり、AppController がそのファイルの所有者です。-(void)awakeFromNibうまくいくメソッドを追加しました。現在、道路の修正のラウンドawakeFromNibが呼び出されなくなりましたが、その理由がわかりません。これは xib を所有しているため、アーカイブを解除するときに呼び出す必要があります。どうしたの?

編集:

さて、私は名前を に変更awakeFromNibし、それを...somethingから呼び出しました。initなぜそうでないのか、まだ混乱してawakeFromNibいます。そこにはメソッドもあります+(void) initializeが、それは何かを台無しにしている可能性がありますか?

- (id)init {
    self = [super init];
    if (self) {
        [self something];
    }
    return self;
}


-(void)something {
    NSLog(@"yup");
}
4

1 に答える 1

3

nib でファイルの所有者のクラス名を設定するのは、Xcode にどのオブジェクトのアウトレットとアクションを表示するかを指示して、接続できるようにするためだけです。アプリが実行され、nib が読み込まれるときに、実際にどのオブジェクトがファイルの所有者であるかには影響しません。

MainMenu nib の File's Owner は、Xcode のインスペクターで FO に設定したクラス名に関係なく、常にアプリケーション オブジェクトです。任意のクラス名に設定するが、NSApplication[1] は間違っています。

アプリを実行すると、接続しようとした AppController のアウトレットまたはアクションに関するエラー メッセージがコンソールに表示されます。アプリケーション オブジェクトに存在しないため、接続できませんでした。

nib エディターでクラス名を変更し、MainMenu nib で AppController をカスタム オブジェクトとして作成します。


さて、私は名前を に変更awakeFromNibし、それを...somethingから呼び出しました。init

つまりinit、それが呼び出されているということは、あなたがそれを呼び出しているということです。awakeFromNibこれはペン先で作成する有効な代替手段ですが、ペン先にない場合やペン先を所有していない場合はオーバーライドしないでください。

alloc選択:およびを使用して AppController の作成を続行するinitか、そのコードを削除して代わりに MainMenu nib に作成します。


[1]: または、NSApplication をサブクラス化し、アプリ バンドルのプリンシパル クラスをそのサブクラスに変更した場合は、そのサブクラスの名前。

于 2012-09-27T20:30:36.160 に答える