2016-07-13 13 views
2

私は、エラーメッセージで無限ループとアプリのクラッシュにそのセッターとゲッターのプロパティから直接メモリに変数を保存し、取得しようとしているが、ゲッター結果います:SwiftでNSUserDefaultsとプロパティゲッタとセッタを使用するには?

error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=2, address=0x10049b9a0). The process has been returned to the state before expression evaluation.

を理由とどのように何ができますかこれを正しく行うには?

class Task { 

    let memory = NSUderDefaults.standardUserDefaults() 
    var taskList: [String: Double]{ 

    get { 

     let savedList = memory.dictionaryForKey("SavedTasksList") as? [String: Double] ?? [String: Double]() 

     return savedList 
    } 

    set (tasks){ 

     memory.setObject(tasks, forKey: "SavedTasksList") 

    } 

} 
} 
+1

メモリとは何ですか? NSUserDefaultsにデータを格納するコードはどこですか? –

+0

基本的にこのコードでは無限ループは発生しません。 'taskList'はどのように使用されていますか? – vadian

答えて

4

このような意味ですか? ​​

それともスウィフト3で

:あなたの例では

class Task { 

    var taskList: [String: Double]{ 

     get { 
      return UserDefaults.standardUserDefaults().objectForKey("SavedTasksList") as? [String: Double] ?? [String: Double]() 
     } 

     set { 
      let defaults = UserDefaults.standardUserDefaults() 
      defaults.setObject(newValue, forKey: "SavedTasksList") 
      defaults.synchronize() 
     } 
    } 
} 
+0

それは素晴らしい作品です。なぜ私の実装がうまくいかなかったのか? NSUderDefaults.standardUserDefaultsとしてメモリを定義しました。 – irkinosor

0

、@irkinosor、あなたは更新/セットの実行時に "メモリ" と呼ばれるNSUserDefaultsのインスタンスに()を呼び出す同期されていません。それが一つの要因かもしれない。