0

我有一个 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];

}
4

1 回答 1

1

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

但是,还有一种更简单的方法可以使用绑定来完成此操作。当我做弹出窗口时,我使用一个数组将值提供给弹出菜单。在 IB 中,我删除了您默认获得的菜单项,然后将弹出窗口的内容绑定绑定到例如 App Delegate.data(数据是我的数组的名称)。然后我将选定索引绑定到共享用户默认控制器,其模型键路径为任何类型(不管你叫什么,这是控制器使用的名称,它不是代码中的属性)。当您第一次启动应用程序时,它默认为 index=0,因此您将获得列表中的第一项,并且用户所做的任何更改都将在下次启动时被记住。

于 2012-04-01T15:17:18.030 回答