2016-05-11 6 views
2

Ich bin neu in swift, ich versuche einen Alarm zu erstellen, bekomme aber einen Fehler. Kann ich NSUserDefaults wie im folgenden Code verwenden, und wie kann ich diesen Fehler beheben?Get error Konnte den Wert vom Typ 'NSTaggedPointerString' nicht in 'NSArray' umwandeln

Der Fehler, den ich bekommen ist:

Could not cast value of type 'NSTaggedPointerString' to 'NSArray' 

und tritt in dieser Zeile:

let alarms = defaults.objectForKey("Alarms") as! [String] 

Meine ganze Klasse:

class Alarm { 

    // MARK: - Declare 2 fields just time and switch in alarm 

    var time: String = "" 
    var stateSwitch: Bool = false 

    // MARK: - Initalize 
    init(time: String , turnOn: Bool) { 
     self.time = time 
     self.stateSwitch = turnOn 
    } 


    class func getAllAlarm() -> [Alarm] { 

     var alarms = [Alarm]() 
     let times = getAllTimes() 
     let stateSwitchs = getAllSwitchs() 

     for i in 0...times.count { 

      let alarm = Alarm(time: times[i], turnOn: stateSwitchs[i]) 

      alarms.append(alarm) 

     } 

     return alarms 
    } 

    private class func getAllTimes() -> [String]{ 

     let defaults = NSUserDefaults.standardUserDefaults() 

     let alarms = defaults.objectForKey("Alarms") as! [String] 
     return alarms 
    } 

    private class func getAllSwitchs() -> [Bool]{ 
     let defaults = NSUserDefaults.standardUserDefaults() 

     let stateSwitchs = defaults.objectForKey("Switchs") as! [Bool] 
     return stateSwitchs 
    } 

} 
+1

Es scheint, dass Sie zuvor ein String-Objekt in NSUserDefaults unter "Alarms" gespeichert haben, so dass Sie es nicht als [String] transformieren können. – Larme

Antwort

0

Sie verwenden NSUserdefaults richtig für ein Objekt zu bekommen. Das Problem ist wahrscheinlich, wo Sie die Daten festlegen.

as! [String] 

in Funktion getAllTimes hat eine Kraft gegossen, wirft es, was auch immer Objekt, das Sie auf eine String Array erhalten. Wenn dieses Objekt nicht gecastet werden kann (weil Sie einen anderen Typ eingefügt haben), schlägt dies fehl.

Also, wenn Sie ein String-Array auf NSUserdefaults gespeichert haben, wäre dies erfolgreich.

Um sicher zu sein, sollten Sie den Code anzeigen, wo Sie in NSUserDefaults speichern.

Verwandte Themen