集合视图未正确显示图像

时间:2018-01-23 12:14:07

标签: ios swift uicollectionview

view B我有一个可以从图库中获取图像的图像视图。图像作为NSData

存储在coredata中

现在,如果我点击提交按钮&返回view A,我有一个collectionview,我想要显示图像。如果我再次转到view B并添加其他图片,请点击提交&返回view A我应该看到2张不同的图片。

但是当我回来时,我看到的是第一张图片两次,而不是两张不同的图片。但当我再次运行应用程序时,我会看到所有不同的图像 按要求... 在view A的viewWillAppear中,这就是我所做的......

//Fetching from Database
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Customers2")

do {
    customerDetails2 = try managedContext.fetch(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) as! [Customers2]

    for result in customerDetails2 {

        if let imageData = result.value(forKey: "image") as? NSData {

        }
    }
    collectionview2.reloadData()
} catch let error as NSError {
    print("Could not fetch. \(error), \(error.userInfo)")
}

在视图中的numberOfItemsInSection A ...。

count1 = customerDetails2.count

cellForRowAtIndexPath的{​​{1}} ...

view A

1 个答案:

答案 0 :(得分:1)

问题是使用以下行

 imageArray.append(image)

如您所述,添加第二张图片后会出现问题 因此,您可能会再次重新加载集合视图以显示图像。  上面的代码将再次执行,它将在索引1处附加行零的图像,在索引2处附加行1,因此当您尝试显示row1的图像时,它将与行0相同。 如果要缓存图像,请使用字典 如下所示

//Declare a poperty
var imageDict = Dictionary<String,UIImage>()

//At cellForRow

 imageDict["\(indexpath.row)"] = image

还检查图像是否存在于缓存中

 if let image  = imageDict["\(indexpath.row)"] as? UIImage {

   //Load Image    
 } else {

 //Initialise from data
}