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

时间:2015-08-09 16:56:04

标签: 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

1 个答案:

答案 0 :(得分:0)

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

文件URL和文件路径不同。

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

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