1

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

这是我创建的类,但我不确定应该如何处理 init 和 encoder 函数:

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

期待任何建议。

谢谢你。

4

1 回答 1

2

这是将对象保存到 /tmp 目录的实现和游乐场示例。该init(coder:)函数覆盖了 NSObject 的required原样,并且由于它不是指定的初始化程序,因此必须将其标记为convenience. 也因为init(coder:)是便利初始化器,它不能调用super.init().

要直接回答有关存档数组的问题,只需键入 cast the result from 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")
  }
}

在此处输入图像描述

于 2015-09-11T15:09:50.260 回答