如何在应用程序重新启动时加载用户最后选择的滑块值?

How to load the user’s last selected value for a slider when the app relaunches?

我是 Xcode 的新手,我在 OSX 中使用 Objective C。

我正在尝试在应用重新启动时加载用户最后选择的滑块值。

我的滑块代码是……

- (IBAction)sliderChanged:(id)sender {

    amount = [self.amountSlider integerValue];

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

    [self.amountLabel setStringValue:amountString];
}

我有这个setter…

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

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

我想知道如何编码 getter。

将不胜感激带有代码的分步说明。

我上面现有代码的任何 improvements/corrections 也将不胜感激。

你自找的:D 在您的 class 中创建名为 amountChecker = 0

的整数变量

像这样创建一个名为 checker 的函数:

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

然后 .. 在这个函数中:

- (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];
}

现在,如果一秒钟过去并且您的滑块没有改变,此代码将仅存储您的值,而不是每秒存储您的值 60 次 :D 当您更改滑块时,一切都会开始,然后在一秒钟后,它将检查值是否已更改,如果没有,它将存储它

当您重新打开应用程序时,您将使用此代码:

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

像这样从默认值中获取和保存单独的函数。

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

这将使保存和检索默认值变得简单。 喜欢-

[self saveValueToUserDefaults:YOUR_AMOUNT forKey:YOUR_KEY];

然后像这样,

YOUR_AMOUNT = [self retriveValueFromUserDefaults:YOUR_KEY];