i have weird issue. i'm saving custom class object in nsuserdefaults
, , while retrieving data nil
int
variable of object. below custom class
class user { var name: string? var user_id: int? var account_id: int? var location: string? }
i'm saving object as,
let defaults = nsuserdefaults.standarduserdefaults() var data = nskeyedarchiver.archiveddatawithrootobject([user]) // can see int values user objects here defaults.setobject(data, forkey: "all_users")
retrieving data as,
let defaults = nsuserdefaults.standarduserdefaults() let data = defaults.dataforkey("all_users") var users = [users]() if data != nil { let userdata = nskeyedunarchiver.unarchiveobjectwithdata(data!) as! [users] usr in userdata { print("\(usr.name!)") // prints name print("\(usr.user_id!)") // nil value here users.append(usr) } }
i have absolutely no idea reason behavior.
custom classes have none property list items need conform nscoding able saved in nsuserdefaults.
here guide conforming nscoding: http://nshipster.com/nscoding/
you need both of these functions:
init(coder decoder: nscoder) { self.name = decoder.decodeobjectforkey("name") string self.user_id = decoder.decodeintegerforkey("user_id") self.account_id = decoder.decodeintegerforkey("account_id") self.location = decoder.decodeobjectforkey("self.location") string } func encodewithcoder(coder: nscoder) { coder.encodeobject(self.name, forkey: "name") coder.encodeint(self.user_id, forkey: "user_id") coder.encodeint(account_id, forkey: "account_id") coder.encodeobject(self.location, forkey: "location") }
Comments
Post a Comment