【问题标题】:How to save arrays of video URLS to User Defaults? [closed]如何将视频 URL 数组保存到用户默认值? [关闭]
【发布时间】:2017-12-28 20:59:03
【问题描述】:

我要保存三个数组,以便在用户退出应用程序时可用。

我做了研究,我知道我应该使用用户默认值来保存这些。

这是我要保存的三个数组。

var thumbnails = [UIImage]()

var timeArray: [Int] = [Int]()

var videosArray: [URL] = [URL]()

如何将这三个数组保存到用户默认值?

【问题讨论】:

  • UserDefaults 不是保存应用数据的合适位置,尤其是像图像这样的大数据。

标签: ios arrays swift nsuserdefaults


【解决方案1】:

UserDefaults 允许您使用set(,forKey:) 保存数据。如果 UserDefaults 中不允许的类型,您可以使用 PropertyListEncoder 正确归档它们。

var urls = [URL]()
let archived = try! PropertyListEncoder().encode(urls) // Data
UserDefaults.standard.set(archived, forKey: "com.app.key1")

您可以将这些图像保存为文件,然后将 URL 保存到设备的本地存储中。除此之外,将它们保存为原始 NSData/Data 并不是一个好主意。 (更多信息:Persistence of NSURL and file reference URLs

在 objc 中实现的 SO 中还有另一个问题,但它应该足够简单,可以在 Swift 上编写:Save images in NSUserDefaults?

您还应该考虑阅读使用Core DataRealm 等的其他存储方法。

编辑:修复主要的 setValue/set 问题

【讨论】:

  • 不,不要使用setValue。那是键值编码方式,不是UserDefaults的直接方式。仅当您有明确而具体的理由时才使用 KVC(不是这种情况)。此外,您不能直接将UIImageURL 写入UserDefaults。有关支持的类型,请参阅 UserDefaults 的文档。
  • 我添加了一个关于保存 UIImages 的另一个问题的参考,并指定它们可以保存为 NSData(技术上,虽然不推荐)
  • 再一次,不要使用setValue。有关可用方法的列表,请参阅UserDefaults 的文档。
【解决方案2】:

不要尝试将图像等大对象保存到 UserDefaults。

整数或路径的小数组更合理。

您只能将少量数据类型保存到用户默认值 - “属性列表对象”中。

允许的类型是字典、数组、字符串、数字(整数和浮点数)、日期、二进制数据和布尔值。

您应该将图像保存到磁盘上的文件中,然后将这些图像的路径保存到 UserDefaults。

一旦你有一个路径字符串数组,你可以直接使用NSArray方法write(to:atomically:)write(toFile:atomically:)将它保存到UserDefaults

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 2018-08-26
    相关资源
    最近更新 更多