我想保存三个阵列,以便在用户退出应用程序时可用。
我已完成研究,我知道我应该使用用户默认值来保存这些内容。
以下是我想保存的三个数组。
var thumbnails = [UIImage]()
var timeArray: [Int] = [Int]()
var videosArray: [URL] = [URL]()
如何将这三个数组保存为用户默认值?
答案 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
});
方法NSArray
或write(to:atomically:)
答案 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 Data,Realm等来阅读其他存储方法。
编辑:修复主要的setValue / set问题