gpt4 book ai didi

iOS:归档 NSMutableArray

转载 作者:行者123 更新时间:2023-11-29 11:10:38 25 4
gpt4 key购买 nike

我用谷歌搜索并搜索了 SO,但没有直接的结果。看来我对 Apple 文档中的以下内容存在根本性的误解:

An archive can store an arbitrarily complex object graph. The archive preserves the identity of every object in the graph and all the relationships it has with all the other objects in the graph. When unarchived, the rebuilt object graph should, with few exceptions, be an exact copy of the original object graph.

假设我有一个 NSMutableArray,它是 Person 对象的集合。每个 Person 对象都实现了 initWithCoderencodeWithCoder。此外,任何给定的 Person 都可能有 Task 对象的 NSMutableArray(类似的编码兼容)。

我的理解是,有一种方法可以存档,从而触发任意深度的级联序列化,具体取决于编码协议(protocol)的实现。所以在我的 View Controller 中,我有一个 willEnterBackground 可以:

data = [NSKeyedArchiver archivedDataWithRootObject:self.people];
// persist to NSUserDefaults

我有一个 viewDidLoad 可以:

// read from NSUserDefaults
self.people = [NSKeyedUnarchiver unarchiveObjectWithData:data];

这一切都会发生,但有两件事:

  1. 永远不会调用people 数组包含的对象中的initWithCoderencodeWithCoder
  2. 不出所料,结果是 self.people 是一个大小为 0 的 NSMutableArray。令人惊讶的是,未归档的数据长度为 252 字节,这看起来是正确的。

建议?提示?

最佳答案

即使您实现了这 2 个方法,您是否在协议(protocol)中声明了您的 Person 类?

关于iOS:归档 NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11746097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com