2012-01-12 1 views
1

私は2つのNSUserDefaultsキーを持っています:最初は小さなイントロウィンドウを表示するもの、2番目は関連するものです。最初の3セッション。特定のNSUserDefaultsキーをリセットするときにのみアプリケーションがアップデートを取得する

私のアプリケーションを更新すると、最初の3セッションで異なるセルの背景色を表示するために、2番目のキーをリセットします。

これは私のコードは、私のアプリデリゲートである:

[[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はに等しい場合、それはチェック

バンドルのバージョンを返し、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キーを1回だけリセットしてから、再度インクリメントする方法はありますか?

EDIT

私は次のように変更作ら

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

これは私が提案したもので、私の答えに含まれていないコードを見つけ出すのにうまくいきました。 – jrturton

+0

はい、正確です!ありがとうございました :) – Phillip

0

あなたの質問はあまり明確ではありませんが、私は理解できるものに基づいて助けようとしています。問題をより明確に説明できるように、質問を編集してください。

NSString *バージョンの値をログに記録できますか?直後

すなわち:

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

これはあなたの

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

が実行されているかどうかを確認する必要があります

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

を置きます。

また、NSUserDefaultsからキーを削除する必要はありません。コードから次の行を削除しても問題ありません。

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

これらの変更を加えて正常に機能しているかどうか教えてください。

+0

私は自分の質問を編集しました。希望は今より明確です! Btw、ログは "バージョン1.3.4"(実際のバージョンのアプリ)を与える。今、私は1.3.5に私のアプリを更新する場合、私は "runNum"キーをリセットし、0から再び開始することができますか?アプリが更新されているときをどのようにして知ることができ、キーの値を変更できますか? – Phillip

2

最新バージョンが現在のバージョンと等しくない場合は、実行番号をリセットする必要があります。これはあなたの新しいバージョンの最初の実行時になります。したがって、あなたのバンドルからバージョン番号へのユーザーのデフォルトを更新する前に、その時点で実行番号をリセットしてください。

+0

私は理解していないことは:新しいユーザー(アプリが1.3.3バージョンのときにアプリをダウンロードしたユーザー)はまだイントロウィンドウと異なる背景セルの両方を見ることができますか?アプリを更新すると(つまり1.3.4)、セルは3つのセッションで色が変わります(コードに書いたように)。 – Phillip

関連する問題