2016-10-15 7 views
1

Скажем, у меня есть пользовательский объект, определенный как таковые:Изменение свойств класса NSUserDefaults после сохранения (Swift)

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

После освобождения версии приложения, скажем, я хотел бы добавить gender:String собственности. Как мне это сделать, даже если текущий класс не содержит гендерного свойства?

+0

Почему бы не определить его как структуру? –

+0

Мне все равно, будет ли он определяться как struct, class или enum. Я просто хочу знать, как вы можете редактировать существующие свойства nsuserdefaults. –

ответ

1

Вы можете добавить его в будущих выпусках приложения.
Сначала обновите свой класс Person, затем вы можете установить значение versionOfLastRun и проверить, нет ли он. В этом случае вы проверяете, есть ли еще Пользователь, сохраненный в 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

Отлично! Именно то, что я искал. благодаря –