2012-03-31 4 views
0

私はNSPopUpButtonを持っていますが、初めて起動するときに最初の値が正しく設定されません。 awakeFromNibを設定しましたが、NSPopUpMenuは空です。 2回目以降は正しく動作します。 ありがとうございます。あなたがregisterDefaultsを使用する必要があるように私には聞こえる最初の起動時にNSPopUpButtonを設定します

-(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

私はあなたが何を求めているのか分かりません。最初にアプリを起動したときにポップアップで何をしたいですか?どのようにメニュー項目をポップアップメニューに入れていますか? – rdelmar

+0

私は、index = 0のデフォルトのアプリケーションの最初の開始と2回目と次のユーザーが選択したものをデフォルトにしたいと考えています。 これでindex = 0が選択されましたが、正しく動作しません。 – Joannes

答えて

1

(オペレーティング・システムは、インデックスのデフォルト値と0をピックアップしますので、あなたが、しかし、これを実行する必要がないかもしれませんが、それは私が考えて選択されますものです)。これにより、アプリを初めて実行するときにデフォルト値を設定できますが、ユーザーがデフォルトを変更した場合は、次回のアプリ実行時に新しいデフォルトが使用されます(ただし、起動時にデフォルトを読み込む必要があります - - あなたが掲示したコードでは、デフォルト値は読んでいません)。

ただし、バインディングを使用してこれを行うさらに簡単な方法があります。ポップアップを行うと、配列を使用してポップアップメニューに値を入力します。 IBでは、デフォルトで取得したメニュー項目を削除し、ポップアップのコンテンツバインディングをApp Delegate.data(データは配列の名前)にバインドします。次に、選択したインデックスをモデルキーパスで共有ユーザーデフォルトコントローラーにバインドします(呼び出す内容は関係ありません。コントローラーが使用する名前です。コード内のプロパティではありません)。最初にアプリケーションを起動するとデフォルトでindex = 0になり、リストの最初の項目が取得され、ユーザーが行った変更は次回の起動時に記憶されます。

関連する問題