4

我有一个包含各种 NSString 对象和变量的对象,我使用 NSCoding 将其归档到磁盘上的文件中,然后再取消归档。到目前为止,一切都运行良好。

今天,我想向对象添加一个 NSMutableArray 并尝试使用以下代码进行编码:

[encoder encodeObject:myArray ForKey:@"myArray"];

然后使用以下方法对其进行解码:

[self setMyArray:[decoder decodeObjectForKey:@"myArray"]];

它似乎不起作用,虽然我在编码或解码本身没有任何错误,但如果我在从文件解码后尝试修改数组的值,我确实会收到错误消息。

我确定我在这里做错了什么,但不完全确定是什么。我在想也许它可能与它在取消归档期间没有正确分配有关。

有什么看起来很明显是问题的根源吗?

4

1 回答 1

10

它似乎不起作用,虽然我在编码或解码本身没有任何错误,但如果我在从文件解码后尝试修改数组的值,我确实会收到错误消息。

解码档案会为您提供不可变的对象,无论它们在编码时是可变的还是不可变的。你没有做任何特别错误的事情——它像宣传的那样工作。

有关类似问题的另一个示例和解决方案,请参见此答案:

[self setMyArray:[[decoder decodeObjectForKey:@"myArray"] mutableCopy];
于 2012-06-02T00:43:09.513 回答