在swift MVC(Swift)中保存tableview数据

时间:2018-03-28 15:58:14

标签: ios swift xcode model-view-controller

如何在swift MVC中保存tableview数据?

如何在另一个ViewController上保存表中的数据?

我有一个名为ToDoItem的自定义类。

func save() {
    let encodedData: Data = NSKeyedArchiver.archivedData(withRootObject: ToDoItem.self)
    UserDefaults.standard.set(encodedData, forKey: "todosave")
    UserDefaults.standard.synchronize()
}
//
func load() {
    if let decoded = UserDefaults.standard.object(forKey: "todosave") {
        let _ = NSKeyedUnarchiver.unarchiveObject(with: decoded as! Data) as! [ToDoItem]
    }
}

我尝试使用NSUserDefaults保存它,但是我收到错误。

ToDoItem.swift

import Foundation

class ToDoItem: NSObject, NSCoding {

  var id: String
  var image: String
  var title: String
  var date: Date
   init(id: String, image: String, title: String, date: Date) {
     self.id = id
     self.image = image
     self.title = title
     self.date = date
   }

   required convenience init(coder aDecoder: NSCoder) {
     let id = aDecoder.decodeObject(forKey: "id") as! String
     let image = aDecoder.decodeObject(forKey: "image") as! String
     let title = aDecoder.decodeObject(forKey: "title") as! String
     let date = aDecoder.decodeObject(forKey: "date") as! Date
     self.init(id: id, image: image, title: title, date: date)
   }

   func encode(with aCoder: NSCoder) {
     aCoder.encode(id, forKey: "id")
     aCoder.encode(image, forKey: "image")
     aCoder.encode(title, forKey: "title")
     aCoder.encode(date, forKey: "date")
  }
}

1 个答案:

答案 0 :(得分:1)

我建议使用Object Mapper,然后您可以将对象转换为JSON,转换后将其保存为User Defaults,通常使用Any类型。然后,为了加载数据,您可以将之前保存的User Defaults键中的数据映射到TODOItem。

ObjectMapper的链接:https://github.com/Hearst-DD/ObjectMapper 您还可以使用此库将不同的JSON映射到所需的对象