2016-07-13 8 views
2

Ich versuche, eine Variable im Speicher direkt von seinem Setter und Getter-Eigenschaft, aber das Getter Ergebnis in einer Endlos-Schleife und die app Absturz mit Fehlermeldung zu speichern und abzurufen:Wie NSUserDefaults mit Eigenschaft Getter und Setter in Swift verwenden?

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

Was könnte der Grund sein, und wie um das richtig zu machen?

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

Was ist Speicher? Wo ist Ihr Code zum Speichern von Daten in NSUserDefaults? –

+0

Grundsätzlich verursacht dieser Code keine Endlosschleife. Wie wird 'taskList' verwendet? – vadian

Antwort

4

Meinst du sowas?

class Task { 

    var taskList: [String: Double]{ 

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

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

Oder in Swift 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

Das funktioniert großartig. Irgendeine Idee, warum meine Implementierung nicht funktioniert hat? Ich hatte Speicher als NSUderDefaults.standardUserDefaults definieren – irkinosor

0

In Ihrem Beispiel @irkinosor, rufen Sie nicht() auf der Instanz des "Speicher" genannt NSUserDefaults synchronisieren, wenn ein Update/Satz durchgeführt wird. Das könnte ein Faktor sein.