使用 NSUserDefaults 保存自定义 Class 数组
Save Custom Class Array With NSUserDefaults
我有一个习惯 class 叫朋友:
class Friend {
var fullName: String
var birthday: String
var from: String
var photoLink: String = ""
var photo: UIImage = UIImage()
var photos: [AnyObject] = [AnyObject]()
init(fullname: String, birthday: String, gotFrom: String) {
self.fullName = fullname
self.birthday = birthday
self.from = gotFrom
}
}
我尝试使用 NSUserDefaults 保存它,但我收到错误消息,因为我使用了自定义 Class.
如何保存Friend数组?
这是您从 NSUserDefaults
保存和检索 class 的简单示例:
//your class
class Person: NSObject, NSCoding {
var name: String!
var age: Int!
required convenience init(coder decoder: NSCoder) {
self.init()
self.name = decoder.decodeObjectForKey("name") as! String
self.age = decoder.decodeObjectForKey("age") as! Int
}
convenience init(name: String, age: Int) {
self.init()
self.name = name
self.age = age
}
func encodeWithCoder(coder: NSCoder) {
if let name = name { coder.encodeObject(name, forKey: "name") }
if let age = age { coder.encodeObject(age, forKey: "age") }
}
}
//store values in class and store it to NSUserDefaults
var newPerson = [Person]()
newPerson.append(Person(name: "Leo", age: 45))
newPerson.append(Person(name: "Dharmesh", age: 25))
let personData = NSKeyedArchiver.archivedDataWithRootObject(newPerson)
NSUserDefaults().setObject(personData, forKey: "personData")
//retrive your values
if let loadedData = NSUserDefaults().dataForKey("personData") {
loadedData
if let loadedPerson = NSKeyedUnarchiver.unarchiveObjectWithData(loadedData) as? [Person] {
loadedPerson[0].name //"Leo"
loadedPerson[0].age //45
}
}
已在 playground 上测试。
希望这个例子对您有所帮助。
我有一个习惯 class 叫朋友:
class Friend {
var fullName: String
var birthday: String
var from: String
var photoLink: String = ""
var photo: UIImage = UIImage()
var photos: [AnyObject] = [AnyObject]()
init(fullname: String, birthday: String, gotFrom: String) {
self.fullName = fullname
self.birthday = birthday
self.from = gotFrom
}
}
我尝试使用 NSUserDefaults 保存它,但我收到错误消息,因为我使用了自定义 Class.
如何保存Friend数组?
这是您从 NSUserDefaults
保存和检索 class 的简单示例:
//your class
class Person: NSObject, NSCoding {
var name: String!
var age: Int!
required convenience init(coder decoder: NSCoder) {
self.init()
self.name = decoder.decodeObjectForKey("name") as! String
self.age = decoder.decodeObjectForKey("age") as! Int
}
convenience init(name: String, age: Int) {
self.init()
self.name = name
self.age = age
}
func encodeWithCoder(coder: NSCoder) {
if let name = name { coder.encodeObject(name, forKey: "name") }
if let age = age { coder.encodeObject(age, forKey: "age") }
}
}
//store values in class and store it to NSUserDefaults
var newPerson = [Person]()
newPerson.append(Person(name: "Leo", age: 45))
newPerson.append(Person(name: "Dharmesh", age: 25))
let personData = NSKeyedArchiver.archivedDataWithRootObject(newPerson)
NSUserDefaults().setObject(personData, forKey: "personData")
//retrive your values
if let loadedData = NSUserDefaults().dataForKey("personData") {
loadedData
if let loadedPerson = NSKeyedUnarchiver.unarchiveObjectWithData(loadedData) as? [Person] {
loadedPerson[0].name //"Leo"
loadedPerson[0].age //45
}
}
已在 playground 上测试。
希望这个例子对您有所帮助。