あなたのアプリがライオンをサポートするために起こっている場合は、loadNibNamed:owner:topLevelObjects:
は発生しませんし、ライオンに実行するときには、例外(認識されないセレクター)を取得します。
// loadNibNamed:owner:topLevelObjects was introduced in 10.8 (Mountain Lion).
// In order to support Lion and Mountain Lion +, we need to see which OS we're
// on. We do this by testing to see if [NSBundle mainBundle] responds to
// loadNibNamed:owner:topLevelObjects: ... If so, the app is running on at least
// Mountain Lion... If not, then the app is running on Lion so we fall back to the
// the older loadNibNamed:owner: method. If your app does not support Lion, then
// you can go with strictly the newer one and not deal with the if/else conditional.
if ([[NSBundle mainBundle] respondsToSelector:@selector(loadNibNamed:owner:topLevelObjects:)]) {
// We're running on Mountain Lion or higher
[[NSBundle mainBundle] loadNibNamed:@"NibName"
owner:self
topLevelObjects:nil];
} else {
// We're running on Lion
[NSBundle loadNibNamed:@"NibName"
owner:self];
}
あなたが本当にマウンテンライオン+のためtopLevelObjects:&array
を使用したい、とあなたもライオンをサポートしたい場合は、それはあなたがloadNibFileにフォールバックする必要があります。次のようになります:いくつかの周り検索した後、私はこの思い付いたexternalNameTableを:withZone:(これはクラスとインスタンスの両方のメソッドとして利用できます)(これについては間違っている可能性があります)。これを置き換えるためにloadNibNamed:owner:topLevelObjects:
が作成されたという印象を受けています。
シートの新しいloadNibNamed:owner:topLevelObjects:
を使用すると、シート(ウィンドウ)の「リリース時に解放する」のチェックを外す必要がある点もあります。これは、シートを閉じたときの世話をする必要があります。
[self.sheet close];
self.sheet = nil;
私はあなたが非モーダルウィンドウを開いている場合は、そのチェックボックスについて行われるべき正確に何か分かりません。何か案は?
カスタムシート部分を別の質問に分割することを検討してください。カスタムシートを実装する最適な方法は何ですか。良いタイトルになるでしょう。 – alfwatt