1

I have a custom class called Friend:

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
    }
} 

I've tried saving it with NSUserDefaults but I get an error because I use a custom Class.

How can I save an array of Friend?

Omer
  • 35
  • 4

1 Answers1

3

Here is the simple example for you to save and retrive class from NSUserDefaults:

    //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
    }
}

Tested with playground.

Hope this example will help.

Dharmesh Kheni
  • 71,228
  • 33
  • 160
  • 165