gpt4 book ai didi

swift - 使用 NSCoding 保存数组

转载 作者:IT王子 更新时间:2023-10-29 05:42:19 24 4
gpt4 key购买 nike

我有一个具有一些保存功能的小应用程序。我有一个名为的数据模型类:Closet:

class Department: NSObject, NSCoding {
var deptName = ""
var managerName = ""

var Task: [Assignment]? // <----- assignment class is in example 2

func encodeWithCoder(aCoder: NSCoder) {

aCoder.encodeObject(deptName, forKey: "deptName")
aCoder.encodeObject(managerName, forKey: "mngName")
// aCoder.encodeObject(Task, forKey: "taskArray")

}

required init(coder aDecoder: NSCoder) {

super.init()

course = aDecoder.decodeObjectForKey("deptName") as! String
instructor = aDecoder.decodeObjectForKey("mngName") as! String
// Task = aDecoder.decodeObjectForKey("tasKArray") as? [Assignment]

}

override init() {
super.init()
}

}

这是主 Controller 数据模型,在第一个 View Controller 中,用户可以点击“+”按钮添加部门名称和经理名称。问题不在于保存它,因为我使用 NSKeyedArchive 成功保存它并在应用程序启动时将其加载回来。

问题:

我想在此数据模型 Department 上添加一个名为 Assignment 的作业数组,它有一个 title 和一个 notes 变量。这是分配的数据模型:

Assignment.swift

class Assignment: NSObject, NSCoding {
var title = ""
var notes = ""

func encodeWithCoder(aCoder: NSCoder) {

// Methods
aCoder.encodeObject(title, forKey: "Title")
aCoder.encodeObject(notes, forKey: "notepad")

}

required init(coder aDecoder: NSCoder) {


// Methods
title = aDecoder.decodeObjectForKey("Title") as! String
notes = aDecoder.decodeObjectForKey("notepad") as! String

super.init()
}

override init() {
super.init()
}


}

所以我基本上想要实现的是一个应用程序,用户可以在这个应用程序中使用不同的经理名称进入不同的部门,这些部门现在可以在我的应用程序中使用,但在一个部门内,用户可以单击“+”按钮添加任务标题和注释部分,单击时可以编辑,我可以在之后处理。这些任务因部门而异。

我的大问题是实现此功能。我似乎无法正常工作。

我希望这个数组分配属性成为部门类的一部分,这样每个单元格都可以有自己的待办事项列表。任何帮助肯定会帮助我很多。谢谢 :)

最佳答案

你正确地使用了NSCoder,但是有两个大小写错误。第一个错误影响应用程序的功能,第二个错误是风格错误。您使用 key "taskArray"Task 进行了编码,但您尝试使用 key "tasKArray" 对其进行解码。如果您在后者中固定大写字母 K,那么您的代码将起作用。

第二个大写错误是风格上的错误:Task 和 Swift 中的所有属性一样,应该用 lowerCamelCase (llamaCase) 书写。

一定要密切注意缩进。在编程中,我们遵循一些特殊的缩进规则来帮助使代码清晰。这是经过正确大写和缩进的更正代码:

class Department: NSObject, NSCoding {
var deptName = ""
var managerName = ""

var task: [Assignment]?

func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(deptName, forKey: "deptName")
aCoder.encodeObject(managerName, forKey: "mngName")
aCoder.encodeObject(task, forKey: "taskArray")
}

required init(coder aDecoder: NSCoder) {
super.init()

course = aDecoder.decodeObjectForKey("deptName") as! String
instructor = aDecoder.decodeObjectForKey("mngName") as! String
task = aDecoder.decodeObjectForKey("taskArray") as? [Assignment]
}

override init() {
super.init()
}
}

class Assignment: NSObject, NSCoding {
var title = ""
var notes = ""

func encodeWithCoder(aCoder: NSCoder) {
// Methods
aCoder.encodeObject(title, forKey: "Title")
aCoder.encodeObject(notes, forKey: "notepad")
}

required init(coder aDecoder: NSCoder) {
// Methods
title = aDecoder.decodeObjectForKey("Title") as! String
notes = aDecoder.decodeObjectForKey("notepad") as! String

super.init()
}

override init() {
super.init()
}
}

关于swift - 使用 NSCoding 保存数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32032380/

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