使用NSCoder Swift编码数组

时间:2015-09-11 14:20:30

标签: ios arrays swift nscoder

我试图实施NSCoder,但目前正面临一个顽固的问题。 我的目标是通过NSCoder将字符串数组保存到本地文件,并在下次应用程序打开时加载它。

这是我创建的课程,但我不确定如何处理init和编码器功能:

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的路径?它不够清楚。

期待任何建议。

谢谢。

1 个答案:

答案 0 :(得分:2)

以下是将对象保存到/ tmp目录的实现和操作示例。 init(coder:)函数会覆盖NSObject,因此它是required,因为它不是指定的初始化程序,所以它必须标记为convenience。另外,由于init(coder:)是便捷初始值设定项,因此无法调用super.init()

要直接回答有关存档数组的问题,只需输入decoderObjectForKey(_:)的结果。检查NSCoding文档以获取有关代码/解码的信息和API。那里有很多。

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")
  }
}

enter image description here