2012-02-15 22 views
0

私は新しいバージョンのアプリを開発中です。古いバージョンのアプリでは、ウェブからキャッシュフォルダにコンテンツがダウンロードされています。このコンテンツは新しいバージョンではもはや有効ではありませんので、最初にこれらのファイルのいくつかを削除して、この新しいバージョンのアプリを開始したいと思います。初めてアプリを起動する方法を確認するには?

アプリが初めて起動していることを確認するにはどうすればよいですか? NSUserDefaultsを使って表示を保存できましたが、これを行うにはより良い方法がありますか?

答えて

5

は、アプリケーションがdidFinishLaunchingWithOptions:方法で初めて開始した、と私は、デフォルトではアプリケーションの現在のバージョンを保存する場合、私は確認しています。 これはアプリケーションが更新されるたびに削除される必要があるファイルと、そのバージョンのアプリケーション用に保存する必要のあるファイルを追跡できます。続き は、そのためのコードです:

if (![[NSUserDefaults standardUserDefaults] boolForKey:kNOT_FIRST_LAUNCH]) { 
    NSLog(@"fresh install = %d", (int)[self checkForFreshInstall]); 
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:kAPPLICATION_LAUNCHING_FIRST_TIME]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} else { 
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:kAPPLICATION_LAUNCHING_FIRST_TIME]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

これはcheckForFreshIntallMethodです:

- (BOOL) checkForFreshInstall { 
NSString *currentVersion = (NSString*)[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; 
NSString *prevVersion = (NSString *)[[NSUserDefaults standardUserDefaults] valueForKey:@"prevVersion"]; 

if (prevVersion == nil) { 
    // Starting up for first time with NO pre-existing installs (e.g., fresh 
    // install of some version) 
    [[NSUserDefaults standardUserDefaults] setValue:currentVersion forKey:@"prevVersion"]; 
    // Save changes to disk 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    return YES; 
} 
else if ([prevVersion intValue] < [currentVersion intValue]) { 
    // Starting up for first time with this version of the app. This 
    // means a different version of the app was alread installed once 
    // and started. 
    [[NSUserDefaults standardUserDefaults] setValue:currentVersion forKey:@"prevVersion"]; 
    // Save changes to disk 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    return NO; 
} 
return YES; 

}

は、ご質問があれば私に教えてください。

+0

「NSArray * currentparts = [currentVersion componentsSeparatedByString:@ "。"]; 'とNSArray * perviousParts = [pervVersion componentsSeparatedByString:@]のような何かをいつでも実行できます。インストールされているバージョンは、以前のバージョンよりも大きいです。お役に立てれば。 – nimeshdesai

+0

メジャーバージョンとマイナーバージョンには常に2つの整数を使用できます(または#。#。#には3つの整数) –

0

NSUserDefaultsアプローチに問題はありません。私は何

if(the flag has not been set somewhere to say we've already done this dance){ 
do the stuff we need to do 
set the flag that we'll check again next time and skip this code next time 
}