【发布时间】:2012-02-09 00:37:17
【问题描述】:
我有两个 NSUserDefaults 键:第一个是与显示小介绍窗口相关的一个,第二个是与前 3 个会话更改 tableView 中的单元格背景颜色相关的一个。
现在,当我更新我的应用程序时,我希望重置第二个键,以便为前 3 个会话显示不同的单元格背景颜色。
这是我的应用委托中的代码:
[[NSUserDefaults standardUserDefaults] setObject: @"1.3.5" forKey:@"lastVer"];//in memory
NSString *lastVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastVer"];
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSLog(@"**** Version: %@",version);
NSNumber *runNumber = [[NSUserDefaults standardUserDefaults] objectForKey:@"runNum"];
if(![lastVersion isEqualToString: version]){
NSNumber *runNumber = [NSNumber numberWithInt:0];
[[NSUserDefaults standardUserDefaults] setObject:runNumber forKey:@"runNum"];
}
else {
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:([runNumber intValue] + 1)] forKey:@"runNum"];
NSLog(@"This is Run Number: %d", [runNumber intValue]);
}
if (runNumber == [NSNumber numberWithInt:0]){
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:([runNumber intValue] + 1)] forKey:@"runNum"];
NSLog(@"Run number: %d", [runNumber intValue]);
}
(注意:runNumber 是存储 3 个会话的单元格背景颜色的键)
它检查 lastVersion 是否等于 bundle 版本,并重置 runNum 的键(给它值 0)。然后,如果runNum为0,则增加runNumbers。
但是有一个问题!
当 lastVersion 与版本不同时,它会重置密钥,但我不知道如何再次增加 runNum,而无需再次重置运行次数,因为每次打开应用程序时都会重置 runNum!
即
lastVersion = 1.3.4
version = 1.3.5
if lastVersion is different from version, then runNum == 0
and if runNum == 0, runNum = runNum + 1
//CLOSING AND REOPENING THE APP
runNum = 0
runNum = runNum +1
//CLOSING AND REOPENING THE APP
runNum = 0
runNum = runNum + 1
//and so on..
当我关闭并重新打开应用程序时,runNum 键再次为 0!
如何只重置一次 runNum 键,然后再增加一次?
编辑
我做了以下更改:
NSString *lastVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastVer"];
// get the current bundle version.
NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSLog(@"Last Version: %@, New Version: %@", lastVersion, currentVersion);
NSNumber *runNumber = [[NSUserDefaults standardUserDefaults] objectForKey:@"runNum"];
NSInteger runNumberValue = [runNumber integerValue];
if(![lastVersion isEqualToString: currentVersion]){
NSLog(@"Last Version and Version are not same.");
NSNumber *runNumber = [NSNumber numberWithInt:0];
[[NSUserDefaults standardUserDefaults] setObject:runNumber forKey:@"runNum"];
[[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:@"lastVer"];
NSLog(@"last Version is: %@",lastVersion);
}
else {
NSLog(@"Last Version and Version are same.");
NSInteger newRunNumberValue = runNumberValue++;
if(newRunNumberValue > 2) {
newRunNumberValue = 0;
}
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:newRunNumberValue] forKey:@"runNum"];
}
这是在前 3 个会话中使单元格背景发生变化的代码:
NSString *lastVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastVer"];
// get the current bundle version.
NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSLog(@"Last Version: %@, New Version: %@", lastVersion, currentVersion);
NSNumber *runNumber = [[NSUserDefaults standardUserDefaults] objectForKey:@"runNum"];
if (!runNumber) {
NSLog(@"**** Resetting Run Number to zero ****");
NSNumber *runNumber = [NSNumber numberWithInt:0];
[[NSUserDefaults standardUserDefaults] setObject:runNumber forKey:@"runNum"];
} else {
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:([runNumber intValue] + 1)] forKey:@"runNum"];
NSLog(@"This is Run Number: %d", [runNumber intValue]);
}
if(![lastVersion isEqualToString: currentVersion]){
NSLog(@"Last Version and Version are not same.");
[[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:@"lastVer"];
NSLog(@"last Version is: %@",lastVersion);
//What should i do here to make the updated app show the different cells background?
}
else {
NSLog(@"Last Version and Version are same.");
//What should i do here to make the updated app show the different cells background?
}
现在:当用户第一次下载应用程序(3 个会话)和用户更新应用程序时(即使在 N 个会话之后),如何让应用程序显示不同的单元格背景?我被困在这里了。
有什么想法吗?
【问题讨论】:
标签: objective-c nsuserdefaults