2016-06-15 3 views
0

クラス変数(この場合はidauthTokenの変数にセッターを追加してNSUserDefaultsに保存しようとすると、値が保存されないように見えます。 idauthTokenのゲッターは常に偶数値でそれらを設定した後nilを返し、上のブレークポイント。NSUserDefaultsがクラス変数のセッターに保存されない

class CurrentUser { 

    static let defaultInstance = CurrentUser() 

    func updateUser(id id: String, authToken: String) { 
     self.id = id 
     self.authToken = authToken 
    } 

    var authToken: String? { 
     get { 
      if let authToken = NSUserDefaults.standardUserDefaults().objectForKey("userAuthToken") { 
       return (authToken as! String) 
      } else { 
       return nil 
      } 
     } 
     set { 
      NSUserDefaults.standardUserDefaults().setObject(authToken, forKey: "userAuthToken") 
      NSUserDefaults.standardUserDefaults().synchronize() 
     } 
    } 

    var id: String? { 
     get { 
      if let id = NSUserDefaults.standardUserDefaults().objectForKey("userId") { 
       return (id as! String) 
      } else { 
       return nil 
      } 
     } 
     set { 
      NSUserDefaults.standardUserDefaults().setObject(id, forKey: "userId") 
      NSUserDefaults.standardUserDefaults().synchronize() 
     } 
    } 
} 

しかし、私が期待されるすべての著作物として、updateUser機能(1つの高いレベル)に出ラインを引きます。

class CurrentUser { 

    static let defaultInstance = CurrentUser() 

    func updateUser(id id: String, authToken: String) { 
     NSUserDefaults.standardUserDefaults().setObject(id, forKey: "userId") 
     NSUserDefaults.standardUserDefaults().synchronize() 

     NSUserDefaults.standardUserDefaults().setObject(authToken, forKey: "userAuthToken") 
     NSUserDefaults.standardUserDefaults().synchronize() 
    } 

    var authToken: String? { 
     get { 
      if let authToken = NSUserDefaults.standardUserDefaults().objectForKey("userAuthToken") { 
       return (authToken as! String) 
      } else { 
       return nil 
      } 
     } 
    } 

    var id: String? { 
     get { 
      if let id = NSUserDefaults.standardUserDefaults().objectForKey("userId") { 
       return (id as! String) 
      } else { 
       return nil 
      } 
     } 
    } 
} 

これはなぜでしょうか?私は何が欠けていますか? {set}はNSUserDefaultsにアクセスできない別のスレッド/モードで動作しますか?

+0

オブジェクトの存続期間中にロード/保存して単純なインスタンス変数として保存しないのはなぜですか?それは過度に設計されています。 – Droppy

+0

@Droppyあなたはそのことをもう少し説明できますか? – Alex

+0

dealloc(またはswiftで呼び出されたもの)中にinitの間に値をロードして保存し、その値を通常のインスタンス変数として保持します。代わりに明示的なロード/セーブメソッドを持つこともできます。変更するたびにユーザーデフォルトに同期する必要があるとは思っていません。 – Droppy

答えて

1

設定方法にはnewValueを使用する必要があります。値はまだnilであるか、didSetを使用してから変数を使用できます。

0

アレックスによると、setメソッドでnewValueを使用する必要があります。さらに、詳細については、このリンクを参照することができます: Store [String] in NSUserDefaults (Swift)

関連する問題