首次启动时设置NSPopUpButton

时间:2012-03-31 11:14:33

标签: objective-c xcode nspopupbutton

我有一个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 个答案:

答案 0 :(得分:1)

我听起来你需要使用registerDefaults(你可能不需要这样做,因为操作系统将选择默认值,而索引的0是我认为的选择)。这允许您在第一次运行应用程序时设置默认值,但如果用户更改默认值,则下次运行应用程序时将使用该新默认值(但您需要在启动时读取这些默认值 - - 我在您发布的代码中看不到任何默认值。

然而,使用绑定更简单的方法。当我弹出窗口时,我使用一个数组来为弹出菜单提供值。在IB中,我删除了默认情况下获得的菜单项,然后将弹出窗口的内容绑定绑定到例如App Delegate.data(data是我的数组的名称)。然后我将选择的索引绑定到共享用户默认控制器,其中包含模型密钥路径(无论你怎么称呼它,这是控制器使用的名称,它不是代码中的属性)。当您第一次启动应用程序时,它默认为index = 0,因此您将获得列表中第一项的任何内容,并且在下次启动时将记住用户所做的任何更改。