2016-10-20 5 views
1

앱 런타임 중에 사용자가 변경 한 전역 설정 변수 (SettingsVariable.settingOne)가 있습니다. 사용자가 영구적으로 변경하도록하고 싶지만 앱이 다시로드 될 때마다 순간적으로 원래 값으로 되돌립니다. 사용자가 값을 false로 변경하지만 앱이 다시 실행되면 변수 값이 원래 값으로 다시 변경됩니다. 앱 닫히면스위프트 : 앱을 열고 닫을 때 사용자 기본값이 저장 /로드되지 않음

NSUserDefaults.standardUserDefaults().setBool(false, forKey: "settingOne") 

하고 : 값이 다음 코드 변경

(SWIFT 2)라고

다음
func applicationWillTerminate(application: UIApplication) { 
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 

    NSUserDefaults.standardUserDefaults().setBool(SettingsVariables.settingOne, forKey: "settingOne") 
} 

앱 다시 열리면 :

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 

     NSUserDefaults.standardUserDefaults().boolForKey("settingOne") 

     return true 
} 

하지만 settingOne의 값은 원래 'true'의 기본값으로 되돌아갑니다. 응용 프로그램.

SettingsVariables.settingOne는 구조체 내에 포함되어 있습니다 :

import UIKit 

struct SettingsVariables { 

    static var settingOne = true 

} 

답변

1

당신은 NSUserDefaults을 저장 synchronize을 제공해야합니다.

그래서 코드는 당신은 내가 NSUserDefaults에서 요소를 얻기 위해 무엇을 사용이, UserDataKey 그냥
func userDataForKey(key: UserDataKey) -> String? { 
    let userDefaults = NSUserDefaults.standardUserDefaults() 
    if let value: AnyObject = userDefaults.objectForKey(key.rawValue) { 
     return value as? String 
    } else { 
     return nil 
    } 
} 

이 열거

있는 값 NSUserDefaults.standardUserDefaults().synchronize()

+0

답장을 보내 주셔서 감사합니다. 코드에 추가했지만 변경된 값을로드하는 것은 아닙니다. –

+0

1) 일반적으로 '동기화'를 호출 할 필요가 없습니다. 2)'applicationWillTerminate'가 항상 호출되는 것은 아닙니다. – rmaddy

+0

applicationDidEnterBackground 메서드에도 코드가 있지만 작동하지 않습니다. –

1

해야합니다 저장을 위해

func setUserData(value: AnyObject?, key: UserDataKey) ->() { 
    let userDefaults = NSUserDefaults.standardUserDefaults() 
    userDefaults.setObject(value, forKey: key.rawValue) 
} 
+0

답장을 보내 주셔서 감사합니다. 코드에 추가했지만 변경된 값을로드하는 것은 아닙니다. –

+0

applicationWillTerminate 메서드는 멀티 태스킹에서 앱을 종료 할 때만 호출됩니다. "applicationDidEnterBackground"메소드에 저장 논리를 추가하십시오. –

+0

applicationWillTerminate 및 applicationDidEnterBackground 메서드 모두에서 coe가 있지만 작동하지 않는 applicationWillTerminate 메서드에서 –

-1

를 동기화해야

func applicationWillTerminate(application: UIApplication) { 
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 

    NSUserDefaults.standardUserDefaults().setBool(SettingsVariables.settingOne, forKey: "settingOne") 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 
관련 문제