Note that there are some explanatory texts on larger screens.

plurals
  1. POReset a specific NSUserDefaults key only when app gets an update
    primarykey
    data
    text
    <p>I have two NSUserDefaults keys: the first is the one related to show a little intro window, the second is the one related to change the cells background color in my tableView for the first 3 sessions.</p> <p>Now, when i update my app, i want the second key to reset, in order to show a different cells background color for the first 3 sessions.</p> <p>This is my code in my app delegate:</p> <pre><code>[[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]); } </code></pre> <p>(Note: the runNumber is the key that stores the cells background color for 3 sessions)</p> <p>it checks if the lastVersion is equal to the bundle version and it resets the key for runNum (giving it the value 0). Then, if the runNum is 0, it increase the runNumbers.</p> <p>But there's a problem!</p> <p>When the lastVersion is different from version, it resets the key, but i don't know how to increment runNum again, without resetting again the number of the runs, because runNum is being reset everytime i open the app! </p> <p>i.e.</p> <pre><code>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.. </code></pre> <p>When i close and reopen the app, the runNum key is 0 again! </p> <p>How can i reset the runNum key ONLY one time and then increment it again?</p> <p><strong>EDIT</strong></p> <p>I made the following changes: </p> <pre><code>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 &gt; 2) { newRunNumberValue = 0; } [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:newRunNumberValue] forKey:@"runNum"]; } </code></pre> <p>And this is the code that makes the cells background change on the first 3 sessions:</p> <pre><code> 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? } </code></pre> <p>Now: how can i make the app show the different cells background when the user downloads it for the first time (3 sessions) and when the user updates the app (even after N sessions)? I'm stuck here.</p> <p>Any ideas? </p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload