我有一个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];
}
答案 0 :(得分:1)
我听起来你需要使用registerDefaults(你可能不需要这样做,因为操作系统将选择默认值,而索引的0是我认为的选择)。这允许您在第一次运行应用程序时设置默认值,但如果用户更改默认值,则下次运行应用程序时将使用该新默认值(但您需要在启动时读取这些默认值 - - 我在您发布的代码中看不到任何默认值。
然而,使用绑定更简单的方法。当我弹出窗口时,我使用一个数组来为弹出菜单提供值。在IB中,我删除了默认情况下获得的菜单项,然后将弹出窗口的内容绑定绑定到例如App Delegate.data(data是我的数组的名称)。然后我将选择的索引绑定到共享用户默认控制器,其中包含模型密钥路径(无论你怎么称呼它,这是控制器使用的名称,它不是代码中的属性)。当您第一次启动应用程序时,它默认为index = 0,因此您将获得列表中第一项的任何内容,并且在下次启动时将记住用户所做的任何更改。