使用 NSCoding 使用更多数组数据更新 iOS 存储数据
Update iOS Stored Data with More Array Data with NSCoding
我有一个列表视图,它收集用户在表单中输入的一些数据。
我计划为用户提供一个选项,让他们点击列表项,并记录他们点击它的日期。因此,我创建了一个 NSCoding 版本,如下所示。
class Item: NSObject, NSCoding {
var uuid: String = NSUUID().uuidString
var name: String = ""
var days: [ NSDate ]?
func encode(with coder: NSCoder) {
coder.encode(uuid, forKey: "uuid")
coder.encode(name, forKey: "name")
coder.encode(days, forKey: "days")
}
required init?(coder aDecoder: NSCoder) {
super.init()
if let archivedUuid = aDecoder.decodeObject(forKey: "uuid") as? String {
uuid = archivedUuid
}
if let archivedName = aDecoder.decodeObject(forKey: "name") as? String {
name = archivedName
}
if let archivedDays = aDecoder.decodeObject(forKey: "days") as? [ NSDate ] {
var getDays = archivedDays
}
}
init(name: String, days: [NSDate]) {
self.days = days
self.name = name
super.init()
}
}
我想检索当前天数列表,这将是一个数组,然后将另一个日期添加到该数组的末尾。但是,我不确定如何检索此数据并通过添加更多数据来更新数组。
我知道如何替换数据,但不知道如何使用 NSCoding 更新或附加更多数据。我该怎么做?
对于想知道如何执行此操作(即更新数组以添加更多日期)的任何人 - 您只需执行此操作。在我的示例中,当有人单击列表中的项目时,我添加了更多日期,所以我这样做了 -
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell:UITableViewCell = tableGet.cellForRow(at: indexPath as IndexPath) as! UITableViewCell
let cellID = cell.tag
if let filePath = pathForItems() {
if (NSKeyedUnarchiver.unarchiveObject(withFile: filePath) as? [Item]) != nil {
let clickedItem = items[cellID] as? Item
let days = clickedItem?.days ?? []
let date = [ Date() ]
let combinedDays = date + days
clickedItem?.days = combinedDays
print(clickedItem?.days)
NSKeyedArchiver.archiveRootObject(items, toFile: filePath)
}
}
}
基本上使用 NSKeyedUnarchiver 取消存档我的数据,从该数据中获取数组,然后将更多内容添加到该特定数组。将其全部压缩,并将其放回存储空间。
其实并不太难。
我有一个列表视图,它收集用户在表单中输入的一些数据。
我计划为用户提供一个选项,让他们点击列表项,并记录他们点击它的日期。因此,我创建了一个 NSCoding 版本,如下所示。
class Item: NSObject, NSCoding {
var uuid: String = NSUUID().uuidString
var name: String = ""
var days: [ NSDate ]?
func encode(with coder: NSCoder) {
coder.encode(uuid, forKey: "uuid")
coder.encode(name, forKey: "name")
coder.encode(days, forKey: "days")
}
required init?(coder aDecoder: NSCoder) {
super.init()
if let archivedUuid = aDecoder.decodeObject(forKey: "uuid") as? String {
uuid = archivedUuid
}
if let archivedName = aDecoder.decodeObject(forKey: "name") as? String {
name = archivedName
}
if let archivedDays = aDecoder.decodeObject(forKey: "days") as? [ NSDate ] {
var getDays = archivedDays
}
}
init(name: String, days: [NSDate]) {
self.days = days
self.name = name
super.init()
}
}
我想检索当前天数列表,这将是一个数组,然后将另一个日期添加到该数组的末尾。但是,我不确定如何检索此数据并通过添加更多数据来更新数组。
我知道如何替换数据,但不知道如何使用 NSCoding 更新或附加更多数据。我该怎么做?
对于想知道如何执行此操作(即更新数组以添加更多日期)的任何人 - 您只需执行此操作。在我的示例中,当有人单击列表中的项目时,我添加了更多日期,所以我这样做了 -
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell:UITableViewCell = tableGet.cellForRow(at: indexPath as IndexPath) as! UITableViewCell
let cellID = cell.tag
if let filePath = pathForItems() {
if (NSKeyedUnarchiver.unarchiveObject(withFile: filePath) as? [Item]) != nil {
let clickedItem = items[cellID] as? Item
let days = clickedItem?.days ?? []
let date = [ Date() ]
let combinedDays = date + days
clickedItem?.days = combinedDays
print(clickedItem?.days)
NSKeyedArchiver.archiveRootObject(items, toFile: filePath)
}
}
}
基本上使用 NSKeyedUnarchiver 取消存档我的数据,从该数据中获取数组,然后将更多内容添加到该特定数组。将其全部压缩,并将其放回存储空间。
其实并不太难。