0

NSPopOver をアプリに追加しようとしていますが、10.7 以降を実行している場合にのみ読み込まれます。ポップオーバー、ビューコントローラー、ビューを別のxibに入れ、ロードしました

BOOL loaded = [NSBundle loadNibNamed:@"Popovers.xib" owner:self];

アプリデリゲートのawakeFromNibメソッド内から。xib は正常にロードされますが (loaded は YES)、NSPopover を指すアウトレットは null のままです。awakeFromNib メソッド内で xib をロードする際に問題はありますか?

興味深いことに、ファイル名に .xib 拡張子を含めなかった場合、クラッシュしました。

4

1 に答える 1

1

これが正しければ、NSBundle の loadNibNamed:owner: メソッドはバンドルをロードするだけで、最上位オブジェクトをインスタンス化することはありません。これは、instantiateNibWithOwner:topLevelObjects: などの適切な NSNib メソッドを使用して行うことができます。

私は NSViewController サブクラスのインスタンスを作成して nib をロードすることを好みます:

viewController = [[MyViewController alloc] initWithNibName:@"name" bundle:[NSBundle mainBundle]]

次に、カスタム ビュー コントローラーの -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil メソッド内で Nib をインスタンス化します。

[self loadView];
于 2012-04-10T16:57:29.817 に答える