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

우수! 정확히 내가 무엇을 찾고 있었는지. 감사 –