で
おかげで、あなたがdocumentationを読みましたか? nibs/xibsを読み込むときは、File's Owner(xibのトップレベルオブジェクト)を指定する必要があります。つまり、所有者が目的のアウトレットを持っていなければならないので、どのオブジェクトを渡すかを意味します。
BOOL success = [NSBundle loadNibNamed:@"MyNib" owner:selfOrSomeControllerWithOutlets];
これはxibの内容を読み込んで、指定した所有者に接続する最も簡単な方法です。
コントローラーインスタンスを作成し、そのxibを一度に読み込むこともできます。一例として、ビュー/ビュー・コントローラは、メイン・ウィンドウ・コントローラによってロードされてもよい。ウィンドウコントローラの内部では、あなたが(それがWidgetView.xib内部ビューをロードする)これを行う方法-widgetViewがある可能性があります。この場合
- (NSView *)widgetView
{
if (!_widgetViewController)
_widgetViewController = [[MyWidgetViewController alloc] initWithNibName:@"WidgetView" bundle:nil];
return [_widgetViewController view];
}
を、MyWidgetViewControllerはそれを-viewプロパティを与えるNSViewControllerサブクラス(ありますxib内のFile Ownerのクラス名はMyWidgetViewControllerに設定され、ビューコンセントはメインコンテナビューに接続されます。コントローラがxibで正常に初期化されると、-viewあなたのサブクラスが持っている他のコンセントが再接続され、コントローラーがxibのコンテンツに接続されたとき
初めて-widgetViewを要求すると、xibと手ビューを戻す(またはゼロ)。それ以降の呼び出しでは、既にロードされているビューが戻されます。これは「レイジーローディング」と呼ばれ、通常は常に使用されるわけではないビューのための最良の方法です。複数の「コピー」に対してこれを行うこともできます。作成されたときにコンテナに各ビューコントローラを追加し、必要に応じて管理します。 (:バンドルは:nilを返します。その場合-initWithNibNameに)、あなたはそれを行うべきではありません。もちろん、
上記のコードは、XIBが見つからなかったという可能性を無視します。間違いなくNSAssert ...()を使用してエラーを処理し、優雅に終了します(xibが見つからない場合、アプリのバンドルに問題がある可能性が高いため)。
nice for explanaion – user970251