使用 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 上测试。

希望这个例子对您有所帮助。