アプリを閉じた後でも保存できるように変数をXcodeに保存しようとしていますが、アクセスするときにいくつかの異なるクラスとファイルから変数を保存し、アクセスするときに変数の値を変更します。したがって、同様のスレッドは完全には適用されません。格納される値は文字列であり、これまでのコードは次のとおりです。
var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(Token, forKey: "") as! String
これは正しい形式だと思いますが、呼び出して変更する方法がわかりません。試行すると、予期された宣言を示すエラーメッセージが表示されるためです。
とにかくどんな助けでも大歓迎です。
まず、変数を格納するための一意のキーを指定する必要があります(例ではMyKey
)。
AppDelegate > applicationDidFinishLaunching
キーをデフォルト値で登録します。
利点は、オプションではない変数を使用でき、デフォルト値が定義されていることです。
let defaults = UserDefaults.standard
let defaultValue = ["MyKey" : ""]
defaults.register(defaults: defaultValue)
これで、どこからでもキーの値を読み取ることができます
let defaults = UserDefaults.standard
let token = defaults.string(forKey: "MyKey")
そしてそれを保存します
let defaults = UserDefaults.standard
defaults.set(token, forKey: "MyKey")
Swift
(vadianの答えに感謝します)
AppDelegate > applicationDidFinishLaunching
:
let defaults = UserDefaults.standard
let defaultValue = ["myKey" : ""]
defaults.register(defaults: defaultValue)
キーを保存するには:
let defaults = UserDefaults.standard
defaults.set("someVariableOrString", forKey: "myKey")
defaults.synchronize()
キーを読み取るには:
let defaults = UserDefaults.standard
let token = defaults.string(forKey: "myKey")
token
という文字列変数があるとします。
デバイスに保存されている値を保存/更新するには:
NSUserDefaults.standardUserDefaults().setObject(token, forKey: "mytoken")
NSUserDefaults.standardUserDefaults().synchronize()
上記のコードでは、キーに値( "mytoken")を指定しました。これは、後で見つけることができるようにするためです。
デバイスから保存された値を読み取るには:
let token = NSUserDefaults.standardUserDefaults().objectForKey("mytoken") as? String
メソッドobjectForKey
はオプションのAnyObject
を返すので、必ずオプションのString
(オプションはnilまたは値を持つことを意味します)にキャストします。