2012-10-12 3 views

答えて

43
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 

    if (![userDefaults valueForKey:@"version"]) 
    { 
      // CALL your Function; 

      // Adding version number to NSUserDefaults for first version: 
      [userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"];  
    } 


    if ([[NSUserDefaults standardUserDefaults] floatForKey:@"version"] == [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue]) 
    { 
    /// Same Version so dont run the function 
    } 
    else 
    { 
     // Call Your Function; 

     // Update version number to NSUserDefaults for other versions: 
     [userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"]; 
    } 
+0

おかげBhupendra – Eldhose

+0

は、私は、ユーザーのドキュメントストアにplistの設定ファイルを記述しようとしていた、あなたの方法は、 – Bhupendra

+0

割れもの@Bhupendraある – MagicalArmchair

2

NSUserDefaultsにBOOL値のキー(例:isFirstLaunch = NO)を作成し、その機能を実行した後にYESに設定できます。

ユーザーがアプリケーションを起動するたびに実行する場合は、Appが存在する前にそのキーをデフォルト値に設定する必要があります(AppDelegateの-applicationWillTerminate:メソッドでリセットする)。

3

アプリがあるときに最初にインストールしたり、すべての更新の後のいずれかのいくつかのコードを実行したい場合、あなたはあなたのバンドルから

CGFloat currentVersion = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue]; 

を、アプリケーションの現在のバージョンを読んで、あなたの後にユーザデフォルトにそれを書くことができますコードを実行しました。

[[NSUserDefaults standardUserDefaults] setFloat:currentVersion 
             forKey:kLastVersionThatExecutedMyCodeKey]; 

次回にアプリケーションを起動するときに、ユーザーのデフォルトの値とバンドルのバージョンを比較します。バンドルのバージョンが変更された場合はアプリでは、コードを再度実行して、ユーザーのデフォルトに新しいバージョンを書く必要があることを意味して更新されました。

+0

は、(引用符がありません)であるべき - > [[NSUserDefaults standardUserDefaults] setFloat:CurrentVersionの forKey:@ "kLastVersionThatExecutedMyCodeKey"];小さな 'K 'と変数名にプレフィックス – mikemike396

+0

@ Pyraego.comは、それが一定であることを示すために、一般的な慣例です。 Appleのフレームワークは多くの場所でそれを使用しています。 'kLastVersionThatExecutedMyCodeKey'は変数ではなく、文字列そのものであると考えられます。 –

+0

興味深いです!知っておいてよかった。混乱させて申し訳ありません。あなたは歓迎:) – mikemike396

7

これはBhupendra's answerのスウィフト変換です:

let infoDictionary: NSDictionary? = NSBundle.mainBundle().infoDictionary // Fetch info.plist as a Dictionary 
let temp: NSString = infoDictionary?.objectForKey("CFBundleVersion") as NSString 
let val: Float = temp.floatValue 

var userDefaults = NSUserDefaults() 
if userDefaults.valueForKey("version") == nil {    
    // Call function 
    // Adding version number to NSUserDefaults for first version 
    userDefaults.setFloat(val, forKey: "version") 
} 

if NSUserDefaults().floatForKey("version") == val { 
    // Same Version so dont run the function 
} else {  
    // Call function 
    // Update version number to NSUserDefaults for other versions 
    userDefaults.setFloat(val, forKey: "version") 
} 
1

誰がそれを必要とする場合、これは、Bhupendraの回答のSwift2.0バージョンです!

let infoDictionary: NSDictionary? = NSBundle.mainBundle().infoDictionary 
    //Fetch info.plist as a Dictionary 
    let temp: NSString = infoDictionary?.objectForKey("CFBundleVersion") as! NSString 
    let val: Float = temp.floatValue 

    let userDefaults = NSUserDefaults() 
    if userDefaults.valueForKey("version") == nil { 
     userDefaults.setFloat(val, forKey: "version") 
    } 
    if NSUserDefaults().floatForKey("version") == val { 
     //if it is the same version, don't run the code 
    } 
    else { 
     userDefaults.setFloat(val, forKey: "version") 
    } 
}