编码 NSMutableArray
Posted
技术标签:
【中文标题】编码 NSMutableArray【英文标题】:Encoding an NSMutableArray 【发布时间】:2012-06-02 00:29:35 【问题描述】:我有一个包含各种 NSString 对象和变量的对象,我使用 NSCoding 将其归档到磁盘上的文件中,然后再取消归档。到目前为止,一切都运行良好。
今天,我想向对象添加一个 NSMutableArray 并尝试使用以下代码进行编码:
[encoder encodeObject:myArray ForKey:@"myArray"];
然后使用以下方法对其进行解码:
[self setMyArray:[decoder decodeObjectForKey:@"myArray"]];
它似乎没有工作,虽然我在编码或解码本身没有任何错误,但如果我在从文件解码后尝试修改数组的值,我确实会收到错误。
我确定我在这里做错了什么,但不完全确定是什么。我在想这可能与取消归档期间分配不正确有关。
有什么看起来很明显是问题的根源吗?
【问题讨论】:
NSKeyedArchiver and NSKeyedUnarchiver with NSMutableArray的可能重复 我同意。本质上是同一个问题。当我创建它时,我没有意识到它。老实说,我忘了我以前也遇到过类似的问题!在这两者中,我认为这个更简洁并且有一个简单直接的答案,而几周前的变化更加详细,并且包括其他可能导致此问题的相关问题。感谢所有帮助过两者的人! :) 哈!我什至没有注意到你问了重复的问题。 ;-) 【参考方案1】:它似乎没有工作,虽然我没有收到任何错误 编码或解码本身,如果我尝试修改,我会收到错误 从文件中解码后数组的值。
解码存档会为您提供不可变对象,无论它们在编码时是可变的还是不可变的。你没有做任何特别错误的事情——它就像宣传的那样工作。
请参阅this answer 了解另一个类似问题的示例和解决方案:
[self setMyArray:[[decoder decodeObjectForKey:@"myArray"] mutableCopy];
【讨论】:
我会说你邮寄的。显然我有一个完整的菜鸟一天。我应该看到的......特别是因为“类似的问题”是我几周前另一个菜鸟日的问题。如果可以的话,我会给你加倍的支持......只是为了耐心并让我回到我已经得到的答案。 ::: 拍脑门::: Hm.... 进行了更改(我的 NSKeyedUnarchiver 设置为 RETAIN ...我将其更改为 mutableCopy,并且我也将 mutableCopy 添加到我的数组解码器方法中)并且它仍然在崩溃时我尝试将对象:添加到数组...但仅在取消归档之后。有什么想法吗? 检查您尝试添加对象的数组是否是有效的、可变的数组。检查您添加的对象是否有效。如果两者都可以,那么添加对象应该没有问题。 即使进行了更改,我的 Array 在取消归档后仍显示为“NSArrayI”而不是“NSArrayM”。这是我用于阵列的解码器行:[self setPerformanceCast:[[decoder decodeObjectForKey:@"performanceCast"] mutableCopy]];
我找到了解决方案:看起来我没有保存对 performanceCast 数组的属性设置的更改。最初它被设置为属性(复制)而不是属性(保留)。我之前更改过它,但一定没有保存它。现在一切正常。在相关说明中,您能否推荐一个好的资源,我可以用来更好地理解保留、复制等参数和一般的内存管理?我有 Stephen Kochan 的书,但这是 ARC 的第四版,所以他删除了很多内存管理说明。以上是关于编码 NSMutableArray的主要内容,如果未能解决你的问题,请参考以下文章