如何在应用程序重新启动时加载用户最后选择的滑块值?
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];
我是 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];