swift - iOS: Custom object's int variable returns nil in NSUserDefaults -


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