【问题标题】:How to save UIImages at app directory with NSUserDefaults and show them in a UITableViewCell?如何使用 NSUserDefaults 将 UIImages 保存在应用程序目录中并在 UITableViewCell 中显示它们?
【发布时间】:2015-08-09 16:56:04
【问题描述】:

我将 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
}

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

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

【问题讨论】:

  • 您是否尝试过将 viewDidLoad 的内容移动到 viewWillAppear 中?

标签: ios swift uitableview uiimage nsuserdefaults


【解决方案1】:

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

文件 URL 和文件路径不同。

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

还要检查文件是否保存成功?

【讨论】:

    猜你喜欢
    • 2020-04-27
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多