2016-06-21 9 views
0

Ich bin neu in Xcode und ich verwende Objective C in OSX.Wie wird der zuletzt ausgewählte Wert des Benutzers für einen Schieberegler geladen, wenn die App neu gestartet wird?

Ich versuche, den zuletzt ausgewählten Wert des Benutzers für einen Schieberegler zu laden, wenn die App neu startet.

meinen Code für den Schieber ist ...

- (IBAction)sliderChanged:(id)sender { 

    amount = [self.amountSlider integerValue]; 

    NSString *amountString = [NSString stringWithFormat:@"%ld", amount]; 

    [self.amountLabel setStringValue:amountString]; 
} 

Ich habe diesen Setter ...

- (void)setInteger:(NSInteger)valueforKey:(NSString *)defaultName{ 

    [[NSUserDefaults standardUserDefaults] setObject:@"amountString" forKey:@"amountSlider"]; 
} 

Ich mag würde wissen, wie die Getter codieren.

Eine Schritt-für-Schritt-Anleitung mit Code wird geschätzt.

Alle Verbesserungen/Korrekturen zu meinem bestehenden Code oben würden auch geschätzt werden.

+0

Speichern Sie den Wert in 'NSUserDefaults' und den Wert Ihrer Schieber zuweisen, wenn die App relauncht. –

Antwort

0

Stellen Sie separate Funktionen zum Abrufen und Speichern von Standardwerten wie diesem bereit.

- (void)saveValueToUserDefaults:(NSString *)pValue key:(NSString *)kKey { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    [self removeValueFromUserDefaults:kKey]; 

    [defaults setObject:pValue forKey:kKey]; 
    [defaults synchronize]; 
} 

- (void)removeValueFromUserDefaults:(NSString *)kKey { 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if ([defaults objectForKey:kKey]) { 
     [defaults removeObjectForKey:kKey]; 
    } 
} 

- (NSString *)retriveValueFromUserDefaults:(NSString *)kKey { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if ([defaults objectForKey:kKey]) { 
     return [defaults objectForKey:kKey]; 
    } else { 
     return kStringEmpty; 
    } 
} 

Dies erleichtert das Speichern und Abrufen von Werten aus den Standardeinstellungen. Like-

[self saveValueToUserDefaults:YOUR_AMOUNT forKey:YOUR_KEY]; 

und bekommen wie diese,

YOUR_AMOUNT = [self retriveValueFromUserDefaults:YOUR_KEY]; 
0

Sie haben es so gewollt: D in der Klasse Integer-Variable amountChecker = 0

erstellen eine Funktion namens checker wie folgt aufgerufen erstellen:

-(void) checker { 
    if (amount == amountChecker){ 
     [[NSUserDefaults standardUserDefaults] setObject:amountLabel.text forKey:@"amountSlider"]; 
    } 
    else 
     amount = amountChecker; 
} 

dann .. in dieser Funktion:

- (IBAction)sliderChanged:(id)sender { 

    amount = [self.amountSlider integerValue]; 

    NSString *amountString = [NSString stringWithFormat:@"%ld", amount]; 

    [self.amountLabel setStringValue:amountString]; 
    [self performSelector:@selector(checker) withObject:nil afterDelay:1]; 
} 

Jetzt speichert dieser Code nur dann Ihren Wert, wenn eine Sekunde vergangen ist und Ihr Schieberegler sich nicht geändert hat, anstatt Ihren Wert wie zu speichern 60 mal pro Sekunde: D alles beginnt, wenn Sie den Schieberegler ändern dann nach einer Sekunde wird er prüfen, ob der Wert geändert, wenn es nicht es speichert

und wenn Sie die App wieder öffnen Sie diesen Code verwenden:

amount = [[NSUserDefaults standardUserDefaults] objectForKey:@"amountSlider"];