2016-04-23 9 views
2

Ich habe eine Klasse sagen,Speicher benutzerdefiniertes Objekt zu NSUserDefaults in Swift

class GroupClass{ 
    var groupId: String = "" 
    var groupName: String = "" 
} 

Ich möchte in der Lage sein, seine Aufgabe zu speichern, in NSUserDefaults. Ich habe versucht, auf diese Weise,

let group = GroupClass() 
let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject(group, forKey: "group") 
defaults.synchronize() 

und abgerufen es folgende Art und Weise,

let defaults = NSUserDefaults.standardUserDefaults()   
var group = defaults.objectForKey("group") as! GroupClass 

Es warf Ausnahme Using non-property obect und stürzte ab. Was ist der richtige Weg, dies in Swift zu tun?

auch versucht, die folgende Art und Weise,

class GroupClass{ 
    var groupId: String = "" 
    var groupName: String = "" 

    required init(coder aDecoder: NSCoder) { 
     self.groupId = aDecoder.decodeObjectForKey("groupId") as! String 
     self.groupName = aDecoder.decodeObjectForKey("groupName") as! String 

    } 

    func encodeWithCoder(aCoder: NSCoder) { 
     aCoder.encodeObject(self.groupId, forKey: "groupId") 
     aCoder.encodeObject(self.groupName, forKey: "groupName") 

    } 
} 

Aber let group = GroupClass(coder:NSCoder()) Problem gibt.

+0

Verwendung NSKeyedArchiver für diesen –

+0

@EICaptain Können Sie bitte einen Demo-Code zur Verfügung stellen, ich bin neu in Swift. –

+0

2. Antwort ist in Swift http://stackoverflow.com/questions/19720611/attempt-to-set-a-non-property-list-object-as-an-nsuserdefaults –

Antwort

2

Sie können die Klassenreferenz nicht unter userdefault speichern. Gruppe ist deine Referenz deiner Klasse. warum sparst du es? Es zeigt nur Ihre Klasse in Erinnerung. Es wird zerstört, nachdem es seine Aufgabe erfüllt hat. Userdefaults dienen zum Speichern von Daten wie Strings, Arrays, Dictionary usw. Sie sollten keine Referenz in der Datenbank speichern müssen. Ich denke nicht.

Sie können group.groupId oder group.groupName in userdefaults festlegen. dann auch, wenn Sie das speichern möchten, dann können Sie es in nsdata von NSKeyedArchiver konvertieren und speichern Sie diese Daten zu nsuserdefault und unarchive es, wenn es von NSKeyedUnArchiver benötigt.

Hope this helfen :)

Verwandte Themen