Cocoa NSBundle loadNibNamed устарел

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


person hcontreras    schedule 22.07.2015    source источник


Ответы (1)


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

person stevesliva    schedule 23.07.2015
comment
Спасибо за ваш ответ. Мне не хватало части свойства окна. Теперь все работает нормально. ???? - person hcontreras; 24.07.2015