Ios 将NSArray数据保存到磁盘

Ios 将NSArray数据保存到磁盘,ios,arrays,cocoa-touch,save,Ios,Arrays,Cocoa Touch,Save,我有一个包含NSMutableDictionary的NSMutableArray。每个词典都有一个AVAsset、一个NSURL、一个NSString和两个UIImages。我想将阵列保存到磁盘,以便每次关闭和打开应用程序时,我都可以加载阵列并将URL转换为NSData对象,以便播放音频并使用AVAssets执行其他一些操作。我知道我可以使用initWithContentsOfFile和writeToFile:atomically保存和加载我的数组,这个答案非常有用:。然而,这个答案是从2009

我有一个包含
NSMutableDictionary
NSMutableArray
。每个词典都有一个
AVAsset
、一个
NSURL
、一个
NSString
和两个
UIImages
。我想将阵列保存到磁盘,以便每次关闭和打开应用程序时,我都可以加载阵列并将URL转换为
NSData
对象,以便播放音频并使用
AVAssets
执行其他一些操作。我知道我可以使用
initWithContentsOfFile
writeToFile:atomically
保存和加载我的数组,这个答案非常有用:。然而,这个答案是从2009年开始的。现在有没有更好的保存和加载数组的方法

至于你链接的答案,答案仍然有效。根据它,你不能以它提到的方式储存它。这是因为数组必须与plist格式兼容才能这样保存。当您将数组向下解析到最低的元素层次结构时,就有了
UIImage
,它只是一个对象指针,没有意义

一种实用的方法是将
UIImages
存储为单独的文件,并将其路径存储为
NSMutableDictionary
对象的一部分。阿瓦塞特也是如此。当然,您需要设计解决方案来完全实现这一目标


存储不兼容plist的对象的另一种方法是使用归档和取消归档功能。请参阅。在这里,确保树中的每个对象都遵循协议
NSCoding
(问题中的AVAsset可能不符合协议,因此您需要一种解决方法)。例如,请查看并搜索类似文件。

writeToFile
不适用于
AVAsset
UIImage
对象。阅读该方法的文档。将
UIImages
AVAssets
保存为单独的文件是什么意思?不要将它们存储在内存中将它们存储到磁盘,并将它们的路径存储在字典中。稍后从磁盘中检索它们。