ios - 如何使用 NSUserDefaults 将 UIImages 保存在应用程序目录中并在 UITableViewCell 中显示它们?

标签 ios swift uitableview uiimage nsuserdefaults

我将 UIImages 数据路径保存到 NSUserDefaults 中的数组中,但仅在应用程序第一次启动时

func saveImages() ->Bool{
    if let isAppAlreadyLaunchedOnce = defaults.stringForKey("isAppAlreadyLaunchedOnce"){
        //App already launched
        return true
    }
    else{
        defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")
       //App launched first time

    var images = [UIImage(named: "apple"), UIImage(named: "banana")]
    var dataVoid = [UIImagePNGRepresentation(images[0]),UIImagePNGRepresentation(images[1])]
    var imagesDatas = [dataVoid[0],dataVoid[1]]

    var documentsDirectory:String?
    var paths:[AnyObject] = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)

    if paths.count > 0 {

        documentsDirectory = paths[0] as? String
        var savePaths = [documentsDirectory! + "/apple", documentsDirectory! + "banana"]
        for index in savePaths{
            for secondIndex in imagesDatas {

        NSFileManager.defaultManager().createFileAtPath(index, contents: secondIndex, attributes: nil)

            }
        }

        NSUserDefaults.standardUserDefaults().setObject(savePaths, forKey: "NSSavePaths")
        NSUserDefaults.standardUserDefaults().synchronize()

      }
    }
        return false
}

然后我从 NSUserdefaults 调用该数组并将其存储在 viewDidLoad 的变量中

 var arraySavePaths:NSArray = []

     override func viewDidLoad() {
        super.viewDidLoad()
           saveImages()
           arraySavePaths = NSUserDefaults.standardUserDefaults().objectForKey("NSSavePaths")  as! NSArray
           table.reloadData()  
     }

在 cellForRowAtIndexPath 中,我将 uiimages 分配给每个单元格

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

    let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")
    cell.imageView?.image = UIImage(named: arraySavePaths[indexPath.row] as! String)

    return cell
}

这在应用程序第一次启动时有效

enter image description here

问题是应用程序第二次启动时(未调用 saveImages() 时)它不显示任何内容,我可能做错了什么?

Second launch

最佳答案

我猜“图像路径”导致了这个问题。

文件 URL 和文件路径不同。

保存文件 URL 并使用 UIImage(initWithContentURL) 或 保存文件路径并使用 UIImage(initWithContentPath)

并检查文件是否保存成功?

关于ios - 如何使用 NSUserDefaults 将 UIImages 保存在应用程序目录中并在 UITableViewCell 中显示它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31906582/

相关文章:

ios - 动态调整弹出窗口大小时防止动画

objective-c - 选择第一行时,数据未加载到详细 View Controller

ios - ViewControllers 使用的类的命名模式并包含业务逻辑

swift - 在多个目标中重用本地 Swift 包

ios - 文本字段上的 UITapGestureRecognizer 与预期不符

ios - 如何通过拖放 UITableview Cell Swift 启用前导和尾随滑动

ios - 自定义 UITableViewCell : programmatically trigger selection segue

ios - 使用Swift将数据写入Firebase

swift - 从 Facebook 获取电话号码

iphone - 当行重新排序或删除时更新交替颜色的 UITableViewCells