Ho una classe personalizzata denominata User
conforme al protocollo NSCoding. Ma quando sto cercando di conservarlo in NSUserDefaults ottengo questo errore:L'app si arresta in modo anomalo durante la memorizzazione di un oggetto personalizzato in NSUserDefaults
Property list invalid for format: 200
(property lists cannot contain objects of type 'CFType')
E questo avvertimento:
NSForwarding: warning: object 0x7f816a681110 of class 'Shikimori.User'
does not implement methodSignatureForSelector: -- trouble ahead
Unrecognized selector -[Shikimori.User _copyDescription]
User
classe:
class User: NSCoding {
private enum CoderKeys: String {
case ID = "user.id"
case Username = "user.username"
case Email = "user.email"
case Avatar = "user.avatar"
}
let id: Int
let username: String
let email: String
let avatar: String
init(id: Int, username: String, email: String, avatar: String) {
self.id = id
self.username = username
self.email = email
self.avatar = avatar
}
required init(coder aDecoder: NSCoder) {
id = aDecoder.decodeIntegerForKey(CoderKeys.ID.rawValue)
username = aDecoder.decodeObjectForKey(CoderKeys.Username.rawValue) as String
email = aDecoder.decodeObjectForKey(CoderKeys.Email.rawValue) as String
avatar = aDecoder.decodeObjectForKey(CoderKeys.Avatar.rawValue) as String
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeInteger(id, forKey: CoderKeys.ID.rawValue)
aCoder.encodeObject(username as NSString, forKey: CoderKeys.Username.rawValue)
aCoder.encodeObject(email as NSString, forKey: CoderKeys.Email.rawValue)
aCoder.encodeObject(avatar as NSString, forKey: CoderKeys.Avatar.rawValue)
}
}
Aggiornamento codice di salvataggio :
let userKeyForDefaults = "apimanager.user"
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(user, forKey: self.userKeyForDefaults)
non è possibile archiviare oggetti personalizzati in NSUserDefaults – vivek
@ vivek, anche se è conforme a NSCoding? – rabbitinspace
non ho provato, ma forse la tua classe deve basarsi su NSObject? Quindi utente di classe: NSObject, NSCoding – Volker