2012-03-31 7 views
0

Ich habe eine NSPopUpButton aber beim ersten Mal dies nicht korrekt gesetzt den ersten Wert. Ich habe watchFromNib gesetzt, aber das NSPopUpMenu ist leer. Nur das zweite Mal und das nächste Mal funktioniert es richtig. Vielen Dank im Voraus.Legen Sie NSPopUpButton beim ersten Start

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

Ich verstehe nicht, was Sie fragen. Was willst du in dem Popup, wenn du die App zum ersten Mal startest? Wie setzen Sie die Menüpunkte in das Popup-Menü? – rdelmar

+0

Ich möchte Standardindex = 0 den ersten Start der App und das zweite Mal und das nächste, was der Benutzer wählt. Jetzt wählt es index = 0, aber funktioniert nicht richtig. – Joannes

Antwort

1

I klingt wie Sie brauchen registerDefaults zu verwenden (man könnte dies nicht brauchen jedoch zu tun, da das Betriebssystem Standardwerte abholt und 0 für einen Index ist, was es holen glaube ich). Auf diese Weise können Sie beim ersten Ausführen einer App Standardwerte einrichten. Wenn der Benutzer jedoch eine Standardeinstellung ändert, wird diese neue Standardeinstellung beim nächsten Start der App verwendet (Sie müssen diese Standardwerte jedoch beim Start lesen.) - Ich sehe keine Standardwerte in dem von Ihnen geposteten Code.

Es gibt jedoch eine noch einfachere Möglichkeit, dies mit Bindungen zu tun. Wenn ich Popups mache, verwende ich ein Array, um die Werte dem Popup-Menü zuzuführen. In IB lösche ich die Menüelemente, die Sie standardmäßig erhalten, und binden Sie dann die Inhaltsbindung des Popups beispielsweise an App Delegate.data (Daten ist der Name meines Arrays). Dann binde ich den Selected Index an den Shared User Defaults Controller mit einem Modellschlüsselpfad von was auch immer (es ist egal, wie Sie es nennen, dies ist ein Name, den der Controller verwendet, es ist keine Eigenschaft in Ihrem Code). Wenn Sie die App zum ersten Mal starten, wird standardmäßig index = 0 verwendet. Sie erhalten also, was immer das erste Element auf Ihrer Liste ist, und alle Änderungen, die der Benutzer vornimmt, werden beim nächsten Start gespeichert.

Verwandte Themen