2016-10-15 36 views
1

說我有這樣定義的自定義對象:NSUserDefaults的更改類屬性後保存(SWIFT)

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

發佈的應用程序版本後,說我想添加一個gender:String屬性。即使當前課程不包含性別屬性,我該怎麼做?

+0

爲什麼不把它定義爲結構? –

+0

我不在乎它是否被定義爲struct,class或enum。我只想知道如何編輯現有的nsuserdefaults屬性。 –

回答

1

您可以將其添加到應用程序的未來版本中。
首先,更新你的Person類,然後你可以設置一個值versionOfLastRun並檢查它是否爲零。在這種情況下,你檢查是否已經有一個Person保存在NSUserDefaults中,並且它是否創建了一個新的類實例來保存在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

優秀!正是我在找什麼。謝謝 –