1

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) {
???
}

}

さらに、View Controllerでアクセスするにはどうすればよいですか? NSCoder を保存するためのパスはどこで宣言すればよいですか? それは本当に十分に明確ではありません。

アドバイスをお待ちしております。

ありがとうございました。

4

1 に答える 1

2

オブジェクトを /tmp ディレクトリに保存する実装とプレイグラウンドの例を次に示します。このinit(coder:)関数は NSObject をオーバーライドrequiredし、指定された初期化子ではないため、 としてマークする必要がありますconvenience。またinit(coder:)、便利な初期化子であるため、呼び出すことはできませんsuper.init()

配列のアーカイブに関する質問に直接答えるには、型キャストの結果をdecoderObjectForKey(_:). コード化/デコードするための情報と API については、NSCoding のドキュメントを確認してください。そこにはたくさんあります。

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 に答える