Установить NSPopUpButton при первом запуске - PullRequest
0 голосов
/ 31 марта 2012

У меня есть NSPopUpButton, но при первом запуске это не правильно устанавливает первое значение. Я установил awakeFromNib, но NSPopUpMenu пусто. Только второй раз и следующий он работает правильно. Заранее спасибо.

-(IBAction)chancepesoalert:(id)sender{

int selection = [(NSPopUpButton *)sender indexOfSelectedItem];
NSNumber *valore = [NSNumber numberWithUnsignedLongLong:(30*1000*1000)];


if (selection == 0) { 
    valore = [NSNumber numberWithUnsignedLongLong:(30*1000*1000)];
    NSLog(@"Selezionato 0");
} 

if (selection == 1){

    valore = [NSNumber numberWithUnsignedLongLong:(50*1000*1000)];
    NSLog(@"Selezionato 1");
}
if (selection == 2){

    valore = [NSNumber numberWithUnsignedLongLong:(75*1000*1000)];
    NSLog(@"Selezionato 2");
}
if (selection == 3){

    valore = [NSNumber numberWithUnsignedLongLong:(100*1000*1000)];
    NSLog(@"Selezionato 3");
}



NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:valore forKey:@"SetPesoAlert"];
[userDefaults synchronize];   

}


-(void)awakeFromNib {

unsigned long long value = [[[NSUserDefaults standardUserDefaults] objectForKey:@"SetPesoAlert"] unsignedLongValue];

int index;
if (value == (30*1000*1000)) {
    index =0;
}
if(value == (50*1000*1000)) {
    index =1;
}
if(value == (75*1000*1000)) {
    index =2;
}
if(value == (100*1000*1000)) {
    index =3;
}

[pesoalert selectItemAtIndex:index];

}

1 Ответ

1 голос
/ 01 апреля 2012

Похоже, вам нужно использовать registerDefaults (однако, вам может и не понадобиться делать это, поскольку операционная система выберет значения по умолчанию, а 0 для индекса - это то, что я выберу, я думаю). Это позволяет вам устанавливать значения по умолчанию при первом запуске приложения, но если пользователь меняет значение по умолчанию, это новое значение по умолчанию будет использоваться при следующем запуске приложения (но вам нужно прочитать эти значения по умолчанию при запуске - - Я не вижу никаких значений по умолчанию в коде, который вы разместили).

Однако есть еще более простой способ сделать это, используя привязки. Когда я делаю всплывающие окна, я использую массив для предоставления значений во всплывающее меню. В IB я удаляю пункты меню, которые вы получаете по умолчанию, а затем связывает привязку содержимого всплывающего окна, например, с App Delegate.data (data - это имя моего массива). Затем я привязываю выбранный индекс к контроллеру общих пользователей по умолчанию с помощью ключевого пути модели (не важно, как вы его называете, это имя, которое использует контроллер, это не свойство в вашем коде). Когда вы запускаете приложение в первый раз, оно по умолчанию имеет индекс = 0, поэтому вы получите все, что является первым элементом в вашем списке, и любые изменения, внесенные пользователем, будут запомнены при следующем запуске.

...