gpt4 book ai didi

ios - 编码和解码函数如何使用 NSCoding 在 Swift 3 中工作?

转载 作者:行者123 更新时间:2023-11-28 08:16:18 25 4
gpt4 key购买 nike

下午好!

谁能帮助我了解如何在 Swift 中使用 NSCoding 保存数据?我是这门语言的初学者,目前正在观看一些关于如何使用表格 View (创建单元格、保存数据等)的教程。

下面的代码创建了一个 UITableView,我可以在其中添加员工的名字和姓氏。但是,我不明白这些编码和解码函数是如何工作的,因为它只被分配了一个键给名字和一个键给姓氏(这就是我的理解)。我的意思是,因为它是一个员工数组,这些函数是否足够智能,可以为所有员工的名字和姓氏提供相同的键,然后检索数据?

ViewController 类:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var data = [Employee]()

@IBOutlet weak var myTableView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
loadData()
}

var filePath: String {
let manager = FileManager.default
let url = manager.urls(for: .documentDirectory, in: .userDomainMask).first
return url!.appendingPathComponent("Data").path
}

private func loadData(){ //Decode
if let ourData = NSKeyedUnarchiver.unarchiveObject(withFile: filePath) as? [Employee] {
data = ourData
}
}

private func saveData(employee: Employee){ //Encode
self.data.append(employee)
NSKeyedArchiver.archiveRootObject(data, toFile: filePath)
}

func numberOfSections(...)

func tableView(...)

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

//Could be UITableViewCell(), but for a better performance we use this reusable form below:
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

//"indexPath" will return the information based on the number of rows we have. The number of rows in this case is "data.count"
cell.textLabel?.text = data[indexPath.row].Name
cell.detailTextLabel?.text = data[indexPath.row].LastName

return cell

}

@IBAction func addEmployee(_ sender: AnyObject) {

let alert = UIAlertController(title: "Add New Employee", message: "Enter Employee's name", preferredStyle: .alert)

let saveButon = UIAlertAction(title: "Save", style: .default){
(alertAction: UIAlertAction) in

let employeeName = alert.textFields?[0].text!
let employeeLastName = alert.textFields?[1].text!

let newEmployee = Employee(name: employeeName!, lastName: employeeLastName!)

self.saveData(employee: newEmployee)

self.myTableView.reloadData()

}

let cancelButton = UIAlertAction(title: "Cancel", style: .default, handler: nil)

alert.addTextField(configurationHandler: nil)
alert.addTextField(configurationHandler: nil)

alert.addAction(saveButon)
alert.addAction(cancelButton)

self.present(alert, animated: true, completion: nil)
}
}

员工类图片:

code image

希望您能理解我的问题,否则请告诉我。非常感谢!

最佳答案

键是编码器用来序列化和反序列化类属性的。您可以给它们任何字符串值。如果您愿意,可以将 firstName 属性键称为“firstName”而不是“name”,但它们必须与您对对象进行编码和解码时的值相匹配。如果他们不这样做,您将无法获得您期望的值。该类还必须与正在解码和编码的类相匹配,因此请注意将来不要更改它,否则会发生崩溃。数据将在两次发射之间绝对保留。数据存储在应用程序文件目录中。这是使用上述确切代码的项目的链接。您可以亲眼看到它会在两次启动之间持续存在。 https://www.dropbox.com/s/zuxd1kt3brkxtgi/Archiving.zip?dl=0

关于ios - 编码和解码函数如何使用 NSCoding 在 Swift 3 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42493380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com