我已经设置了一个类别来保存这样的应用程序运行次数,
static NSString * const AppRuns = @"IP_AppRuns";
@implementation NSUserDefaults (RegisteredUser)
+ (void)saveRuns:(NSNumber *)value
{
[[NSUserDefaults standardUserDefaults] setObject:value forKey:AppRuns];
}
+ (NSNumber *)runs
{
return [[NSUserDefaults standardUserDefaults] objectForKey:AppRuns];
}
....
我已在我的App委托didFinishLaunchingWithOptions
方法中设置它。
[NSUserDefaults saveRuns: @(21)];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"App has run %ld times", [[NSUserDefaults runs] integerValue]);
但是,我得到EXC_BAD_ACCESS,这让我怀疑它没有被保存。
但是,以下工作:
[[NSUserDefaults standardUserDefaults] setObject:@(17) forKey:@"AppRuns"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"App has run %ld times", [[[NSUserDefaults standardUserDefaults] valueForKey:@"AppRuns"] integerValue]);
我做错了什么?
答案 0 :(得分:0)
+ (NSNumber *)runs
使用objectForKey
访问NSUserDefaults
您的第二个示例使用valueForKey
来访问NSUserDefaults
valueForKey
和objectForKey
都会返回给定键的对象。但这里valuForKey
是键值编码(KVC)。
如果密钥不以“@”开头,则调用objectForKey:
。如果key以“@”开头,则删除“@”并使用其余键调用[super valueForKey:]
。
已编辑
您可以重新安装应用(清除旧的NSUserDefaults
值)并尝试使用此代码吗?
@implementation NSUserDefaults (RegisteredUser)
+ (void)saveRuns:
{
NSNumber *runs = [[NSUserDefaults standardUserDefaults] objectForKey:AppRuns];
[[NSUserDefaults standardUserDefaults] setObject:runs++ forKey:@"Runs"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
+ (NSNumber *)runs
{
return [[NSUserDefaults standardUserDefaults] objectForKey:@"Runs"];
}