- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个具有一些保存功能的小应用程序。我有一个名为的数据模型类: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/
假设我有这个 Swift 类: class Foo: NSObject, NSCoding { var stringMember: String var intMember: Int
我需要对包含多个自定义 NSObject 实例的数组进行编码类(class)。但是,这样做时,它会返回带有消息的崩溃: -[Person encodeWithCoder:]: unrecognized
import Foundation class C: NSObject, NSCoding { var n: String = "" override init() {
我正在尝试将 NSCoding 协议(protocol)添加到我的自定义类中: class Convo: NSObject, NSCoding { var name: String v
我有一个 costum 对象,它引用了另一个自定义对象。如何在我的 - (void)encodeWithCoder:(NSCoder *)encoder 方法中对一个自定义对象内的自定义对象进行编码?
我有 .h 和 .m 来实现 NSCoding,但是 mutableArray 对象计数总是 0 ... .h #import @interface Favorite : NSObject {
我有一个自定义对象,我想将其保存到磁盘而不是内存。自定义对象有子对象,子对象有子对象等等。这棵树相当广泛。其中一个子对象有 30 多个属性,其中 6 个是子对象本身。 如果我想使用NSCoding,是
我有两个类:Contact 和 Bill。 Contact 有一个类型为 Bill 的数组。 当我坚持使用 NSKeyedArchiver 时,我的联系人保持得很好,但是,它不会保持 Bill 数组。
我有一个带有 NSString 键和 Class (objc_class) 值的 NSDictionary,我想使用 NSCoding 存档这个字典 协议(protocol)。 我如何存档“类”对象?
当使用 NSCoding 或 NSKeyedArchiver 建立父子关系时;我无法在子项中设置对父项的引用,因为它最终会在 Swift Playground 上崩溃。 我想在我的 Child 类中引
我一辈子都弄不明白为什么我会收到此类不符合 NSCoding 协议(protocol)的错误。也许另一双眼睛会有所帮助。我试图添加注释以明确每个函数在做什么。 import Foundation im
我使我的以下 Person 类符合 NSCoding 协议(protocol)。 class Person: NSObject, NSCoding{ var age:Int var h
我正在尝试能够序列化和解码自定义类。该类本身有一个属性,它是一个枚举数组,如下所示: (我已经阅读了如何使用原始值并将其序列化,但我还没有弄清楚如何使用这样的数组来做到这一点)。 enum WeekD
我有一个带有 String 属性和 NSImage 属性的“Thing”对象; Thing 类有 encodeWithCoder: 和 decodeWithCoder: 方法,我可以使用 NSKeye
我正在使用 NSCoding 来存档/取消存档自定义类作为数据持久化的方法。如果对象是 NSObject 的子类,它工作正常,但我也有对象是自定义对象的子类。我是否需要更改 initWithCoder
我有一系列嵌套对象需要通过 NSCoding 协议(protocol)进行处理,以便我可以将顶级对象保存到 NSUserDefaults 中。 这是对象的结构: '讲师'类 NSMutableArra
-(void)transformObjects:(NSMutableArray*)array key:(NSString*)key { NSMutableArray* archiveArray
我在 Swift 中使用 NSCoding 时遇到问题。我试图实现该协议(protocol),但每当我调用我的 save() 方法时都会发生崩溃。 Xcode 在 encodeWithCoder 中将
我正在尝试使用基本的父子对象继承系统编写一个简单的 RPG,该系统被保存并加载到游戏状态中,但是当发生加载时,父级没有数据出现,我正在努力理解为什么。 为了简单起见,我做了一个简单的父子对象继承,其中
我有一个 NSPopUpButtonCell 的自定义子类,以便我可以覆盖其 drawBezelWithFrame:inView: 方法。 目前,我必须使用 initTextCell:pullsDow
我是一名优秀的程序员,十分优秀!