2016-10-20 4 views
1

アプリケーション実行時にユーザーによって変更されるグローバル設定変数(SettingsVariable.settingOne)があります。私はユーザーを永久に変更させたいと思っていますが、現時点では、アプリが読み込まれるたびに元の値に戻ります。ユーザーは値をfalseに変更しますが、アプリが再実行されると、変数の値が元の値に戻ります。値は、次のコードが(SWIFT 2)と呼ばれている変更されSwift:ユーザーのデフォルト値がアプリケーションのオープン時と閉じ時に保存/ロードされない

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

アプリが閉じている:

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)通常は 'synchronize'を呼び出す必要はありません。 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を持っていますが、このメソッドが最後に呼び出した場合はNSUserDefaults値をオーバーライドすると、NSUserDefaultsに保存するために "SettingsVariables.settingOne"値を使用している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() 
} 
関連する問題