我有一个小应用程序,具有一些保存功能.我有一个名为的数据模型类: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()
}
}
因此,这是主控制器数据模型,在第一个View Controller中,用户可以点击“”按钮添加部门名称和经理名称.问题不在于保存这个,因为我使用NSKeyedArchive成功保存并在应用程序启动时将其加载回来.
问题:
我想在这个数据模型部门添加一个名为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()
}
}
所以我实际上要实现的是一个应用程序,用户进入不同的部门,使用不同的经理名称,现在可以在我的应用程序中工作,但在部门内,用户可以单击“”按钮添加作业标题和备注部分点击后可以编辑,之后可以处理.这些任务因部门而异.
我的大问题是实现这一功能.我似乎无法让这个工作.
我希望这个数组assigment属性是Department类的一部分,所以每个单元格都有自己的待办事项列表.任何帮助肯定会帮助我很多.谢谢 :)
您正确使用NSCoder,但大小写中有两个错误.第一个错误影响应用程序的功能,第二个错误是样式错误.您使用键“taskArray”对Task进行了编码,但您尝试使用键“tasKArray”对其进行解码.如果您在后者中修复大写字母K,那么您的代码将起作用.
第二个大写错误是一个风格错误:任务,就像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()
}
}

