我将 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()
时)它不显示任何内容,我可能做错了什么?
最佳答案
我猜“图像路径”导致了这个问题。
文件 URL 和文件路径不同。
保存文件 URL 并使用 UIImage(initWithContentURL) 或 保存文件路径并使用 UIImage(initWithContentPath)
并检查文件是否保存成功?
关于ios - 如何使用 NSUserDefaults 将 UIImages 保存在应用程序目录中并在 UITableViewCell 中显示它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31906582/