2016-10-03 3 views
0

새로운 Swift3 변경 사항으로 새로운 UserDefaults 클래스를 사용하는 방법을 잘 모르겠습니다. 이제 코드를 swift3하는 마이그레이션을스위프트 3 마이그레이션 취소 NSUserDefault 데이터

if NSUserDefaults.standardUserDefaults().objectForKey("profileArray") != nil {  
    profileArray = NSUserDefaults.standardUserDefaults().objectForKey("profileArray") as! [String] 
} 

:

나는 성공적으로 userDefaults에 저장된 데이터를 검색하는 swift3로 마이그레이션하기 전에이 코드를했다

if UserDefaults.standard.object(forKey: "profileArray") != nil {   
    profileArray = UserDefaults.standard.object(forKey: "profileArray")! as! [NSString] 
} 

새로운에게 구문은 의미가 있지만 프로젝트를 실행하면 이전에 사용자 기본값에 저장된 데이터가 사라진 것처럼 보입니다.
userdefault.standard ...는 이제 empty/nil을 반환합니다.

swift3 이전 이전에 저장된 데이터는 어떻게 검색합니까?

swift3으로 이동하는 데 도움을 주셔서 감사합니다!

+1

앱의 네임 스페이스가 변경 될 수 있습니까? 설정에 따라 일부 설정이 변경되었거나 기본값이 변경되었을 수 있습니다. – PeejWeej

+5

이것은 Swift 3 호가 아닌 것 같습니다. – tktsubota

+0

@PEEJWEEJ 명시 적으로 아무 것도 변경하지 않았습니다. 변환 중에 변경 될 수 있습니까? –

답변

0

나는 이것을 알아 냈습니다. userDefaults는 "지워지지"않았습니다. userDefaults는 장치에 고유합니다. 그래서 xcode8 로의 이전과 함께 iOS 시뮬레이터도 업그레이드되었습니다 .... 그리고 이것은 기술적으로 새로운 장치 들로서 userDefaults는 결코 포착되지 않았습니다.

시뮬레이터를 추가하면이 이론을 입증했습니다 (iOS 9.x 시뮬레이터를 다시 설치하면됩니다).

또한 실제 기기에서 iOS 9.x &을 사용하여 테스트했으며 새로운 기기는 3 가지 코드로되어 있으며 기본값은 해당 기기에서 유지됩니다.

그래서 문제가 해결되었습니다. :)

0

문제가 해결되는지는 모르겠지만 구문은 그리 효율적이지 않습니다. 불필요하게 사용자 기본값에서 개체를 두 번 검색합니다.

권장되는 방법은 선택적 바인딩이며 전용 메서드는 배열을 가져 오는 : 항상 String보다는 NSString 당신은 선택의 여지가없는 경우를 제외하고

if let array = UserDefaults.standard.array(forKey: "profileArray") as? [String] { 
    profileArray = array 
} 

임 스위프트 사용합니다.

+0

입니다. 효율성에 대해서는 동의하지만 사실 이전에 코드가 작동하여 데이터를 성공적으로 검색하고 swift3으로 마이그레이션 한 후 userDefaults에 저장된 데이터가 손실 된 것처럼 보입니다. –

+0

나는 이것 [link] (http://stackoverflow.com/questions/37798426/using-nsuserdefaults-with-xcode-8-and-ios-10)을 발견했고, 이것이 나의 문제에 가깝게 보인다. 의견 중 하나에서 사용자가 swift3으로 마이그레이션 한 후에도 기본값의 데이터는 계속 유지 될 것이라고 언급했지만 내 사례는 마이그레이션 후 데이터가 지속되지 않는다는 것을 나타내는 것 같습니다. 수백 명의 사용자가 내 앱을 사용하고 있으며 내 앱의 swift2.2 버전에 저장된 NSUserDefault 데이터를 검색해야합니다. –