Какао NSBundle loadNibNamed устарел

Я разрабатываю приложение для какао и заметил, что 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.

1 ответ

Решение

Это window свойство в вашем классе делегата приложения weak? Если так, посмотрите этот ответ. Не устаревший метод, который вы сейчас используете, требует, чтобы ваш контроллер имел сильные ссылки на объекты верхнего уровня.

Другие вопросы по тегам