11

トップレベルのオブジェクトを NSUserDefaults に保存できるように、NSCoding プロトコルを介して配置する必要がある一連のネストされたオブジェクトがあります。

オブジェクトの構造は次のとおりです。

「インストラクター」クラス

  • インスタンスを保持する NSMutableArray...

「クラス」クラス

  • インスタンスを保持する NSMutableArray...

「学生」クラス

  • 名前プロパティ
  • Number プロパティ
  • お金の財産

Instructor のインスタンスを NSUserDefaults またはアプリのドキュメントに保存する必要があります。ご覧のとおり、Instructor オブジェクトは、クラスのインスタンスを保持する配列を保持しています。そのクラス オブジェクトは学生のインスタンスを保持しています。

NSCoding プロトコルは再帰的ですか? つまり、各クラスに NSCoding プロトコルを追加すると、Instructor オブジェクトを保存でき、含まれているオブジェクトが再帰的にエンコードされるということです。

デコード中に同じように機能しますか?1 つのインストラクター クラスをデコードするだけで、NSCoding プロトコルにも準拠しているため、含まれているオブジェクトを再帰的にデコードできますか?

これを設定するにはどうすればよいですか?

4

2 に答える 2

3

NSCodingは魔法ではないので、エンコーディングおよびデコーディング メソッドの実装でそうするように指示されていれば、「再帰的に」機能します。

メソッドを実装し、NSCodingエンコードするデータをエンコーダーに渡します。すべてのカスタム クラスにメソッドを実装して NSCoding、配列をエンコードするときにすべてのコンテンツを適切に処理できるようにします。

superクラスのスーパークラスも実装している場合は、必ず呼び出してくださいNSCoding

例えば

- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:self.arrayOfClasses forKey:@"arrayOfClasses"];
}

- (id)initWithCoder:(NSCoder *)decoder {
    self.arrayOfClasses = [decoder decodeObjectForKey:@"arrayOfClasses"];
}
于 2013-09-25T19:10:22.547 に答える