Я пишу панель предпочтений для управления созданным мной сценарием, и я хочу показать лист при первом запуске, чтобы пользователь мог определить панель, где они установили скрипт. Лист выглядит отлично, проблема в том, что он появляется сразу после нажатия кнопки для моей панели. Это приводит к сбою системных настроек в результате сбоя сегментации.Подождите, пока панель предпочтений будет полностью видна для отображения листа?
Я использую команду, чтобы показать лист внутри awakeFromNib, который может иметь какое-то отношение к нему, но я не могу получить что-либо внутри mainViewDidLoad для фактического выполнения. Любые идеи о том, что я могу сделать?
Код:
- (void) awakeFromNib
{
NSLog(@"hi");
[sheetController setParentWindow:[NSApp mainWindow]];
BashScript *script = [[BashScript alloc] init];
if (![script loadScriptFromLocation:[self retrieveScriptLocation]])
{
NSLog(@"Error loading script.");
}
else {
[advancedEditor setString:[script getScript]];
}
}
- (NSString*) retrieveScriptLocation
{
NSUserDefaults *preferences = [[NSUserDefaults standardUserDefaults] retain];
NSString *location = [preferences stringForKey:@"scriptLocation"];
if (location != nil)
{
return location;
}
else
{
return [self askForScript];
}
}
- (NSString*) askForScript
{
[sheetController openSheet:nil];
}
EDIT: Вот трассировку стека от аварии: http://files.spherecat1.com/prefpanestacktrace.txt
Вы уверены, что нарушение сегментации связано с листом? Какова трассировка стека? (Пожалуйста, внесите изменения в свой вопрос или используйте сайт pastebin.) –
Кроме того, вы не должны сохранять это предпочтение в настройках для системных настроек; вы должны сохранять их в своем собственном домене. Итак, в предпечатной области вы должны использовать CFPreferences, а не NSUserDefaults. –
Хорошо, я снова вызову его и отправлю стек. Кроме того, спасибо за хедз-ап на предмет CFPreferences, я не говорил о том, что System Preferences является текущим приложением во время его работы. – vilhalmer