我已经在iPhone OS / iOS SDK中阅读并观看了NSUserDefaults
上的许多教程,但我似乎无法让自己的实现工作。
现在,我正在构建一个简单的计数应用程序,我希望在应用程序加载时加载最后计算的数字。 然而, NSUserDefaults
有一个不同的想法。有谁知道为什么我的首选项加载方法会在(null)
中继续NSLog
?
提前致谢! :)
CounterViewController.m (删节)
- (void)viewDidLoad {
// yadda yadda yadda interface setup here...
if ([self retrieveCount] == 0) {
count = 0;
} else {
count = [self retrieveCount];
NSString *temp = [[NSString alloc] initWithFormat:@"%@", count];
[label setText:temp];
[temp release];
}
[super viewDidLoad];
}
int count = 123; //whatever it might be when the user exits the application, set every time the "+" or "-" is tapped
- (void)writeCount {
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setInteger:count forKey:@"countKey"];
[prefs synchronize];
}
- (int)retrieveCount {
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs synchronize];
int loaded = [prefs integerForKey:@"countKey"];
NSLog(@"%@", loaded);
return loaded;
}
CounterAppDelegate.m
- (void)applicationWillTerminate:(UIApplication *)application {
/*
Called when the application is about to terminate.
See also applicationDidEnterBackground:.
*/
[CountrViewController writeCount];
}
(因为我只会从一个键中检索一个值,所以我决定不对该方法有任何输入。)
如果这有任何混淆,请告诉我!我很乐意提供澄清。
答案 0 :(得分:3)
首先,只有在您写完默认值之后,才需要在读取默认值之前调用-synchronize
。
您的NSLog
实际上可能是此处的罪魁祸首 - 请尝试%d
而不是%@
。 %@
用于打印对象,例如NSString
或NSNumber
; int
是原始类型。