2014-07-13 120 views
1

我有一个NSMutableArray,其中包含NSMutableDictionary's。每个字典有一个AVAsset,一个NSURLNSString,和两个UIImages。我想将阵列保存到磁盘,以便每次关闭并打开我的应用程序时,我都可以加载阵列并将URL转换为NSData对象以播放音频并使用AVAssets进行其他操作。我知道我可以使用initWithContentsOfFilewriteToFile:atomically保存和加载我的阵列,这个答案非常有用:Saving a NSArray。但是,这个答案是从2009年开始的。现在是否有更好的方式来保存和加载数组?将NSArray数据保存到磁盘

+0

'writeToFile'不适用于'AVAsset'和'UIImage'对象。阅读该方法的文档。 – rmaddy

回答

0

至于你链接的答案,答案仍然有效。根据它,你不能按照它提到的方式来存储它。这是因为数组必须是plist格式兼容才能保存。当你将数组解析到最低的元素层次时,你只有一个对象指针,并且没有意义。

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

另一种存储非plist兼容对象的方法是使用存档和取消存档功能。请参阅documentation。在这里,请确保树中的每个对象遵循协议NSCoding(可能您的问题中的AVAsset不符合协议,所以您需要一种解决此问题的方法)。有关示例,请参阅this answer并搜索它的类似内容。

+0

通过将'UIImages'和'AVAssets'作为单独的文件保存是什么意思? – Brosef

+1

不要将它们存储在内存中将它们存储到磁盘并将其路径存储在字典中。稍后从磁盘中检索它们。 –