如何将视频URL的数组保存到用户默认值?

时间:2017-07-23 01:48:39

标签: ios arrays swift nsuserdefaults

我想保存三个阵列,以便在用户退出应用程序时可用。

我已完成研究,我知道我应该使用用户默认值来保存这些内容。

以下是我想保存的三个数组。

var thumbnails = [UIImage]()

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

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

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

2 个答案:

答案 0 :(得分:1)

请勿尝试将大型对象(如图片)保存到UserDefaults。

小的整数或路径更合理。

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

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

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

获得一个路径字符串数组后,您可以使用next(){ var current = this.state.currentSlide; var next = current + 1; if (next > this.props.stories.items.length - 1) { next = 0; } this.setState({ currentSlide: next }); console.log(this.state.currentSlide ,"next---") } pre(){ var current = this.state.currentSlide; var prev = current - 1; if (prev < 0) { prev = this.props.stories.items.length - 1; } this.setState({ currentSlide: prev }); 方法NSArraywrite(to:atomically:)

直接将其保存到UserDefaults

答案 1 :(得分:0)

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

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

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

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