【问题标题】:Save UIImage array in NSUserDefaults在 NSUserDefaults 中保存 UIImage 数组
【发布时间】:2018-06-25 23:14:19
【问题描述】:

我想将UIImage 数组放入UserDefaults,然后检索它。之后在图像视图中设置检索到的图像。我该怎么做?

【问题讨论】:

    标签: ios swift cocoa-touch nsuserdefaults


    【解决方案1】:

    首先,这不是在用户默认中保存图像的理想方式,但如果您愿意,您可以执行以下操作

    保存

    let imageData = NSKeyedArchiver.archivedData(withRootObject: placesArray)
    UserDefaults.standard.set(imageData, forKey: "images")
    

    检索

           let imageData = UserDefaults.standard.object(forKey: "images") as? NSData
    
            if let imageData = imageData {
                let imageArray = NSKeyedUnarchiver.unarchiveObject(with: imageData as Data) as? [UIImage]!
                print(placesArray)
            }
    

    注意:您应该将图像保存在文档目录中,然后将该名称数组保存为用户默认值。

    将图片保存到文档目录

    func saveImageDocumentDirectory(){
            let fileManager = NSFileManager.defaultManager()
            let paths = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString).stringByAppendingPathComponent("apple.jpg")
            let image = UIImage(named: "apple.jpg")
            print(paths)
            let imageData = UIImageJPEGRepresentation(image!, 0.5)
            fileManager.createFileAtPath(paths as String, contents: imageData, attributes: nil)
        }
    

    检索图像

    func getImage(name : String){
            let fileManager = NSFileManager.defaultManager()
            let imagePAth = (self.getDirectoryPath() as NSString).stringByAppendingPathComponent(name)
            if fileManager.fileExistsAtPath(imagePAth){
                self.imageView.image = UIImage(contentsOfFile: imagePAth)
            }else{
                print("No Image")
            }
        }
    
    func getDirectoryPath() -> String {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
        let documentsDirectory = paths[0]
        return documentsDirectory
    }
    

    【讨论】:

    • 在 Swift 4.2 上运行良好
    【解决方案2】:

    您可以轻松地将图像保存在 documentDirectory 中,如下所示:

    let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first let fileURL = documentDirectory?.appendingPathComponent(yourImageName)

    然后,您可以将图像提供给 UserDefaults

    【讨论】:

      【解决方案3】:

      简单的方法,将 UIImages 转换为 NSData。然后将图像数据添加到 NSArray 中。然后将 NSArray 保存到 UserDefault 中。 当从 UserDefault 中检索 NSArray 时,使用 ImageWithData 方法从 NSArray 的每个元素中渲染 UIImage。 如果您真的将 UserDefaults 用于您的目的,这是最简单的过程。自己试试吧。

      【讨论】:

        【解决方案4】:

        如果你真的要这样做,那真是个坏主意。您应该将图像保存在 DocumentDirectory 中,并将图像名称保存在 NSUserDefaults 中。

        func saveImages(images:[UIImage]) {
        
             let fileManager = FileManager.default
             let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString) 
             var imagesNames = [String]()
        
        
            do {
        
                if !fileManager.fileExists(atPath: path as String){
                    try fileManager.createDirectory(atPath: path as String, withIntermediateDirectories: true, attributes: nil)
                }
        
             for (index,image) in images.enumarated() {
                let imageName = "Image\(index).jpg"
                let imageData = UIImageJPEGRepresentation(image, 1.0)
                if fileManager.createFile(atPath: paths.appending("/\(file)") as String, contents: imageData, attributes: nil) {
                 imagesNames.append(imageName)
                }
              }
             let storage = UserDefaults.standard
             storage.set(imagesNames, forKey: "imagesArray")
             storage.synchronize()
        
            }catch{
                //Throw Error
            } 
        }
        

        【讨论】:

        • 但我在数组中有多个图像,它们希望在 imageview 中显示,以便在 DocumentDirectory 中显示
        • 你能在这里分享你的代码吗,因为我是开发新手
        • 退房。我修改了答案。
        • 在用户默认设置后
        猜你喜欢
        • 2012-06-13
        • 2011-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        • 2016-10-04
        • 1970-01-01
        相关资源
        最近更新 更多