2016-10-15 5 views
1

は私のような定義されたカスタムオブジェクトを持っていると言う:変更NSUserDefaultsクラスのプロパティの保存(スウィフト)の後

class Person { 
    firstName:String, 
    lastName:String, 
    age:Int 
} 

アプリのバージョンをリリースした後、私はgender:Stringプロパティを追加したいと言います。現在のクラスにジェンダープロパティが含まれていないのに、私はどのようにこれを行うでしょうか?

+0

なぜそれを構造体として定義しませんか? –

+0

構造体、クラス、または列挙型として定義されるかどうかは気にしません。既存のnsuserdefaultsプロパティをどのように編集できるかを知りたいだけです。 –

答えて

1

今後のリリースで追加することができます。
まず、Personクラスを更新して、値versionOfLastRunを設定して、それがnilであるかどうかを確認します。この場合、NSUserDefaultsに保存されているPersonがすでに存在するかどうかを確認し、クラスの新しいインスタンスを作成してNSUserDefaultsに保存し、ジェンダーで前のPersonオブジェクトを上書きします。

let currentVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String 
let versionOfLastRun = UserDefaults.standard.value(forKey: "VersionOfLastRun") as? String 

if versionOfLastRun == nil { 
    if (UserDefaults.standard.value(forKey: "Person") as? Person) != nil { 
     let newPerson = Person(//...) 
     UserDefaults.standard.set(currentVersion, forKey: "Person") 
    } else { 
     print("First run") 
    } 
} else if !(versionOfLastRun! == currentVersion) { 
    print("App updated") 

    // Upgrade your model 

} else { 
    print("Nothing changed since last run") 
} 

UserDefaults.standard.set(currentVersion, forKey: "VersionOfLastRun") 

アプリケーションの次のリリースでは、データモデルをアップグレードするには、最後に実行したバージョンを確認してください。

これはあなたの質問に対する回答です。

+0

優秀!まさに私が探していたもの。ありがとう –

関連する問題