Какао 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
? Если так, посмотрите этот ответ. Не устаревший метод, который вы сейчас используете, требует, чтобы ваш контроллер имел сильные ссылки на объекты верхнего уровня.