我有一个集合视图。我想用存储在应用程序核心数据中的图像填充每个单元格。然而,单元格只填充最后一张拍摄的图像。不是每个单独的细胞良性地填充有每个单独的图像。我的代码如下:
-
当用户拍摄照片时,它会被压缩并存储在核心数据中:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { picker.dismiss(animated: true) guard let image = info[.editedImage] as? UIImage else { print("No image found") return } // print out the image size as a test print(image.size) //convert image to savable type for coredata var jpegImageData = image.jpegData(compressionQuality: 1.0) jegImage = jpegImageData! //calling function in coredataManger to save image in data format CoreDataManager.sharedInstance.addImage()
}
-
上面激活的添加到核心数据功能:
func addImage() { let entityName = NSEntityDescription.entity(forEntityName: "ImageData", in: context) let image2 = NSManagedObject(entity: entityName!, insertInto: context) image2.setValue(jegImage, forKeyPath: "imageName") do { try context.save() print("image is saved") } catch let error as NSError { print("Could not save. (error), (error.userInfo)") } }
-
将图像从一个VC传递到另一个的五个全局变量
//global variables for images saved to core data var jegImage = Data() var theImagePulled = UIImage()
-
尝试用核心数据中存储的图像填充集合视图单元格:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "HomeRoomCell", for: indexPath) as! HomeRoomCell let name = cartoonArr[indexPath.item] //setting image shown in the colleciton view equal to the gloabl images stored in core data let image = theImagePulled cell.bindData(name: name, image: image) return cell }
所以问题是单元被填充,但它们都用相同的图像填充。该图像是添加到核心数据模型中的最后一个图像,尽管核心数据模型有多个图像。我一直在尝试建立一个存储所有这些核心数据图像的阵列,但我想不通。有什么想法吗?
去掉全局变量,这些变量确实在捕捉最新的图像。
在集合视图中使用NSFetchedResultsController。
如果您是Core Data的新手,您可能会考虑先传递一个字符串并显示它。然后转到图像。