は私のような定義されたカスタムオブジェクトを持っていると言う:変更NSUserDefaultsクラスのプロパティの保存(スウィフト)の後
class Person {
firstName:String,
lastName:String,
age:Int
}
アプリのバージョンをリリースした後、私はgender:String
プロパティを追加したいと言います。現在のクラスにジェンダープロパティが含まれていないのに、私はどのようにこれを行うでしょうか?
は私のような定義されたカスタムオブジェクトを持っていると言う:変更NSUserDefaultsクラスのプロパティの保存(スウィフト)の後
class Person {
firstName:String,
lastName:String,
age:Int
}
アプリのバージョンをリリースした後、私はgender:String
プロパティを追加したいと言います。現在のクラスにジェンダープロパティが含まれていないのに、私はどのようにこれを行うでしょうか?
今後のリリースで追加することができます。
まず、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")
アプリケーションの次のリリースでは、データモデルをアップグレードするには、最後に実行したバージョンを確認してください。
これはあなたの質問に対する回答です。
優秀!まさに私が探していたもの。ありがとう –
なぜそれを構造体として定義しませんか? –
構造体、クラス、または列挙型として定義されるかどうかは気にしません。既存のnsuserdefaultsプロパティをどのように編集できるかを知りたいだけです。 –