0

NSPopUpButton がありますが、初回起動時に最初の値が正しく設定されません。awakeFromNib を設定しましたが、NSPopUpMenu が空です。2回目以降は正常に動作します。前もって感謝します。

-(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 にバインドします (data は私の配列の名前です)。次に、選択したインデックスを、モデル キー パスを使用して共有ユーザー デフォルト コントローラーにバインドします (名前は何でも構いません。これはコントローラーが使用する名前であり、コード内のプロパティではありません)。アプリを初めて起動すると、デフォルトで index=0 になるため、リストの最初の項目が何であれ取得され、ユーザーが行った変更は次回の起動時に記憶されます。

于 2012-04-01T15:17:18.030 に答える