gpt4 book ai didi

ios - NSUserDefaults 无法检索图像数组

转载 作者:搜寻专家 更新时间:2023-11-01 06:46:10 26 4
gpt4 key购买 nike

我尝试存储 UIImage 数组,它曾经可以工作,但不知何故突然无法工作。我写了这个测试示例来检查它是否正确存储,我想问题出在此处

let images = NSKeyedArchiver.archivedDataWithRootObject(self.globalImageArray)
NSUserDefaults.standardUserDefaults().setObject(images, forKey: "morningImages")
NSUserDefaults.standardUserDefaults().synchronize()
println("Images saved")

let images2 = NSUserDefaults.standardUserDefaults().objectForKey("morningImages") as? NSData
let imagesArray = NSKeyedUnarchiver.unarchiveObjectWithData(images2!) as! NSArray
var testArray = imagesArray as! [UIImage]
println("Check if images are loaded " + "\(testArray.count)")

testArray.count 等于零,这意味着它要么无法正确保存它们,要么无法检索它们。

我尝试打印 images2 并且它确实包含数据,但是打印下一个值 imagesArray 导致结果等于“()”我猜问题出在这一行:

let imagesArray = NSKeyedUnarchiver.unarchiveObjectWithData(images2!) as! NSArray

提前感谢您的帮助。

最佳答案

正如其他人所指出的,这确实不是 NSUserDefaults 的最佳用例。通过写入和读取磁盘上的文件,这应该非常简单。

这是我的做法,它比保存到 NSUserDefaults 的代码更少!

NSKeyedArchiver.archiveRootObject(self.globalImageArray, toFile: "/path/to/archive")
println("Images saved")

if let testArray = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? [UIImage] {
println("Check if images are loaded " + "\(testArray.count)")
} else {
println("Failed to load images.")
}

EDIT 事实证明,这对缓存图像不起作用(例如,任何 UIImage 加载了 UIImage(named:) 变体,因为缓存的图像似乎没有序列化到磁盘。因此,虽然以上适用于未缓存的 UIImages,但无论图像的缓存状态如何,以下都适用。

    // Save the raw data of each image
if NSKeyedArchiver.archiveRootObject(imageArray.map { UIImagePNGRepresentation($0) }, toFile: archivePath) {
println("\(imageArray.count) Images saved")
} else {
println("failed to save images")
}

// Load the raw data
if let dataArray = NSKeyedUnarchiver.unarchiveObjectWithFile(archivePath) as? [NSData] {
// Transform the data items to UIImage items
let testArray = dataArray.map { UIImage(data: $0)! }
println("\(testArray.count) images loaded.")
} else {
println("Failed to load images.")
}

关于ios - NSUserDefaults 无法检索图像数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30580671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com