Attempt to insert non-property list object when trying to save a custom object in Swift 3
You need to create Data
instance from your JobCategory
instance using archivedData(withRootObject:)
and store that Data
instance in UserDefaults
and later unarchive using unarchiveTopLevelObjectWithData(_:)
, So try like this.
For Storing data in UserDefaults
let category = JobCategory(id: 1, name: "Test Category", URLString: "http://www.example-job.com")let encodedData = NSKeyedArchiver.archivedData(withRootObject: category, requiringSecureCoding: false)let userDefaults = UserDefaults.standarduserDefaults.set(encodedData, forKey: UserDefaultsKeys.jobCategory.rawValue)
For retrieving data from UserDefaults
let decoded = UserDefaults.standard.object(forKey: UserDefaultsKeys.jobCategory.rawValue) as! Datalet decodedTeams = NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(decoded) as! JobCategoryprint(decodedTeams.name)
Update Swift 4, Xcode 10
I have written a struct around it for easy access.
//set, get & remove User own profile in cachestruct UserProfileCache { static let key = "userProfileCache" static func save(_ value: Profile!) { UserDefaults.standard.set(try? PropertyListEncoder().encode(value), forKey: key) } static func get() -> Profile! { var userData: Profile! if let data = UserDefaults.standard.value(forKey: key) as? Data { userData = try? PropertyListDecoder().decode(Profile.self, from: data) return userData! } else { return userData } } static func remove() { UserDefaults.standard.removeObject(forKey: key) }}
Profile is a Json encoded object.
struct Profile: Codable {let id: Int!let firstName: Stringlet dob: String!}
Usage:
//save details in user defaults...UserProfileCache.save(profileDetails)
Hope that helps!!!
Thanks
Save dictionary Into userdefault
let data = NSKeyedArchiver.archivedData(withRootObject: DictionaryData)UserDefaults.standard.set(data, forKey: kUserData)
Retrieving the dictionary
let outData = UserDefaults.standard.data(forKey: kUserData)let dict = NSKeyedUnarchiver.unarchiveObject(with: outData!) as! NSDictionary