使用 NSCoder Swift 编码数组
Coding array with NSCoder Swift
我正在尝试实施 NSCoder,但目前面临一个顽固的问题。
我的目标是通过 NSCoder 将字符串数组保存到本地文件,并在应用程序下次打开时加载它。
这是我创建的 class,但我不确定应该如何处理初始化和编码器函数:
class MyObject: NSObject, NSCoding {
var storyPoints: [String] = []
init(storyPoints : [String]) {
self.storePoints = storePoints
}
required init(coder decoder: NSCoder) {
super.init()
???
}
func encodeWithCoder(coder: NSCoder) {
???
}
}
此外,我如何在我的视图控制器中访问它?我应该在哪里声明保存 NSCoder 的路径?确实不够清楚。
期待任何建议。
谢谢。
这是将对象保存到 /tmp 目录的实现和操场示例。 init(coder:)
函数覆盖了 NSObject 的 required
并且因为它不是指定的初始化器所以它必须被标记为 convenience
。也因为 init(coder:)
是一个便利初始化器,它不能调用 super.init()
.
要直接回答有关归档数组的问题,只需键入 decoderObjectForKey(_:)
的结果即可。查看 NSCoding 文档以获取信息和 API 到 code/decode。那里有很多。
import Cocoa
class MyObject: NSObject, NSCoding {
var storyPoints: [String] = []
init(storyPoints : [String]) {
self.storyPoints = storyPoints
}
convenience required init(coder decoder: NSCoder) {
let storyPoints = decoder.decodeObjectForKey("storypoints") as! [String]
self.init(storyPoints: storyPoints)
}
func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(storyPoints, forKey: "storypoints")
}
}
我正在尝试实施 NSCoder,但目前面临一个顽固的问题。 我的目标是通过 NSCoder 将字符串数组保存到本地文件,并在应用程序下次打开时加载它。
这是我创建的 class,但我不确定应该如何处理初始化和编码器函数:
class MyObject: NSObject, NSCoding {
var storyPoints: [String] = []
init(storyPoints : [String]) {
self.storePoints = storePoints
}
required init(coder decoder: NSCoder) {
super.init()
???
}
func encodeWithCoder(coder: NSCoder) {
???
}
}
此外,我如何在我的视图控制器中访问它?我应该在哪里声明保存 NSCoder 的路径?确实不够清楚。
期待任何建议。
谢谢。
这是将对象保存到 /tmp 目录的实现和操场示例。 init(coder:)
函数覆盖了 NSObject 的 required
并且因为它不是指定的初始化器所以它必须被标记为 convenience
。也因为 init(coder:)
是一个便利初始化器,它不能调用 super.init()
.
要直接回答有关归档数组的问题,只需键入 decoderObjectForKey(_:)
的结果即可。查看 NSCoding 文档以获取信息和 API 到 code/decode。那里有很多。
import Cocoa
class MyObject: NSObject, NSCoding {
var storyPoints: [String] = []
init(storyPoints : [String]) {
self.storyPoints = storyPoints
}
convenience required init(coder decoder: NSCoder) {
let storyPoints = decoder.decodeObjectForKey("storypoints") as! [String]
self.init(storyPoints: storyPoints)
}
func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(storyPoints, forKey: "storypoints")
}
}