将核心数据图像添加到集合视图单元格



我有一个集合视图。我想用存储在应用程序核心数据中的图像填充每个单元格。然而,单元格只填充最后一张拍摄的图像。不是每个单独的细胞良性地填充有每个单独的图像。我的代码如下:

  1. 当用户拍摄照片时,它会被压缩并存储在核心数据中:

    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()
    

    }

  2. 上面激活的添加到核心数据功能:

    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)")
    }
    }
    
  3. 将图像从一个VC传递到另一个的五个全局变量

    //global variables for images saved to core data
    var jegImage = Data()
    var theImagePulled = UIImage()
    
  4. 尝试用核心数据中存储的图像填充集合视图单元格:

    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的新手,您可能会考虑先传递一个字符串并显示它。然后转到图像。

最新更新