2012-01-12 29 views
1

我有兩個NSUserDefaults鍵:第一個是與顯示一個介紹窗口有關的那個鍵,第二個是與在我的tableView中更改單元格背景顏色有關的那個鍵前三屆。只有當應用程序獲取更新時重置特定的NSUserDefaults鍵

現在,當我更新我的應用程序時,我想要第二個鍵重置,以便爲前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次會議後)?我被困在這裏。

任何想法?

回答

3

我自己解決了!

if(![lastVersion isEqualToString: currentVersion]){ 
     NSLog(@"Last Version and Version are not same."); 
     [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:@"lastVer"]; 
     NSLog(@"last Version is: %@",lastVersion); 
     NSNumber *runNumber = [NSNumber numberWithInt:0]; 
     [[NSUserDefaults standardUserDefaults] setObject:runNumber forKey:@"runNum"]; 
     NSLog(@"runNumber is: %d",[runNumber intValue]); 

    } 
    else { 
     NSLog(@"Last Version and Version are same."); 
     [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:([runNumber intValue] + 1)] forKey:@"runNum"]; 
     NSLog(@" Run Number: %d", [runNumber intValue]);  
    } 
+2

這幾乎是我的建議,爲搞清楚我沒有在我的答案中包含的代碼做得非常好;)有+1! – jrturton 2012-01-14 13:58:25

+0

是的!謝謝 :) – Phillip 2012-01-14 14:15:09

0

雖然你的問題不是很清楚,但我只是想根據我的理解提供幫助。請編輯您的問題,以便更清楚地描述您的問題。

你可以記錄你的NSString *版本的值。

即剛過:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 

NSLog(@"version %@", version); 

這應該確保你的

if([lastVersion isEqualToString: version]){ 
... 
} 

是否執行與否。

此外,您不必從NSUserDefaults中刪除密鑰,只需更新即可。您可以安全地從你的代碼中刪除這一行:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"runNum"]; 

就做出這些改變,讓我知道,如果它的工作原理。

+0

我編輯了我的問題。希望現在更清楚!順便說一下,日誌給出了「版本1.3.4」(應用程序的實際版本)。現在,如果我更新我的應用程序到1.3.5,我如何使關鍵「runNum」重置並重新從0開始?應用程序如何知道它何時更新並更改關鍵值? – Phillip 2012-01-13 15:06:47

2

當最後一個版本不等於當前版本時,您應該重置運行編號。這將在您的新版本的第一次運行。因此,在將用戶默認值更新爲捆綁軟件中的版本號之前,請重置該點的運行編號。

+0

我不明白的是:新用戶(當應用程序在1.3.3版本時下載了應用程序的用戶)是否仍然可以看到介紹窗口和不同的背景單元格?當他們更新應用程序(即1.3.4)時,單元格是否會改變它們的顏色3次(如我在代碼中所寫的)? – Phillip 2012-01-13 15:40:46

相關問題