0

Cocoa アプリを開発していますが、NSBundle の loadNibNamed が非推奨になっていることに気付きました。

シートを使用していくつかの設定オプションを表示しようとしています。私は AppController を使用しており、構成シートは個別に作成された NIB です。

これは私のコードです。

- (IBAction)showConfig:(id)sender{

   if (!_config) {
      [NSBundle loadNibNamed:@"Config" owner:self];
   }
   [NSApp beginSheet:self.config modalForWindow:[[NSApp delegate] window] modalDelegate:self didEndSelector:NULL contextInfo:NULL];
}

そのコードを使用すると、構成シートが完全に開閉します。

[NSBundle loadNibNamed:@"Config" owner:self];これを構成シートに切り替えて[[NSBundle mainBundle] loadNibNamed:@"Config" owner:self topLevelObjects:nil];も、問題なく動作します。

私の本当の問題は、それを閉じたいときです。アプリがクラッシュし、次のエラーがスローされます。

Thread 1:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

これは、構成シートを閉じる IBAction です。

- (IBAction)closeConfig:(id)sender{
   [NSApp endSheet:self.config];
   [self.config close];
   self.config = nil;
}

非推奨の行をスキップしたら、構成シートを正しく閉じるにはどうすればよいですか?

Yosemite と Xcode 6.4 を実行しています。

4

1 に答える 1

0

プロパティはwindowアプリのデリゲート クラスにありweakますか? その場合は、この回答を参照してください。現在使用している非推奨の方法では、コントローラーが最上位オブジェクトへの強い参照を持つ必要があります。

于 2015-07-23T03:59:09.567 に答える