2016-10-16 2 views
0

내가 스위프트 3 사용하고 있습니다 및 페이스 북의 로그인을 잃고, 나는 다음과 같이 사용자 기본 설정에 facebookSDKGraphrequest에서 얻을 몇 가지 기본 값을 저장 : 나는 경우에만 사용자가 한 번 그 코드를 실행해야NSUserdefaults는 메모리

 // save basic settings in standard user defaults: age, gender, first name 
     let defaults = UserDefaults.standard 
     defaults.set(firstName!, forKey: "firstName") 
     defaults.set(gender!, forKey: "gender") 

     let currentUserAge = calculateAge(birthday: birthDay!) 
     defaults.set(currentUserAge, forKey: "age") 

을 로그인 한 다음 정보를 userDefaults에 저장하면 설정됩니다.

그래서 내가 마지막으로 몇 번 전화를 걸어서 내 앱을 열면 내 userDefaults가 비어 있습니다.

내가 다른 클래스에서이 코드를 실행

,

let defaults = UserDefaults.standard 
var name = defaults.object(forKey: "firstName") as? String 
var age = defaults.integer(forKey: "age") 
var gender = defaults.object(forKey: "gender") as? String 

나는 모든 값을 전무을 얻고 있었다. 그래서 지금은 편집증 적입니다. 사용자의 앱에서 이러한 일이 발생하면 오류가 발생하기 때문입니다.

누군가가 UserDefaults가 메모리를 잃어 버리는 이유를 설명 할 수 있습니까? 값을 삭제하거나 재설정하지 않았습니다. 나는 아마 100 빌드를 거쳤고, 이번에는 UserDefaults의 값이 0이되었습니다.

답변

0

NSUserDefaults은 즉시 내용을 디스크에 저장하지 않습니다. synchronize 메서드는 디스크에 데이터를 쓰는 주기적으로 호출됩니다. 그것은 당신의 경우에 호출되지 않는 것 같습니다. 값 설정을 마치면 defaults.synchronize으로 전화하십시오.

(출처 : https://developer.apple.com/reference/foundation/userdefaults/1414005-synchronize) 주석에 대한

+0

야 마르 주셔서 감사합니다. – makthrow

+0

그것은 UserDefaults가 데이터를 잃어버린 이유를 설명하지 않습니다. 아마 일어난 일은 내 페이스 북 요청이 실패하고, 내가 가진 값이 0이 아니며, 코드에서 기본값을 nil로 설정했다는 것입니다. – makthrow

+0

맞습니다. '동기화'에 대한 누락 된 전화가 문제가되면 디스크에 저장된 데이터가 사라지지 않아야합니다. – Marcio

관련 문제