在swift中从coredata获取数据

在swift中从coredata获取数据,swift,Swift,我的核心数据“产品”和“图像”中有两个实体。产品和图像之间存在一对多关系。我能够将图片库的数量存储到产品中 @IBAction func fetchImageFromLibrary(_ sender: UIButton) { var config = YPImagePickerConfiguration() config.library.maxNumberOfItems = 15 let picker = YPImagePicker(configurati

我的核心数据“产品”和“图像”中有两个实体。产品和图像之间存在一对多关系。我能够将图片库的数量存储到产品中

@IBAction func fetchImageFromLibrary(_ sender: UIButton) {
  var config = YPImagePickerConfiguration()
         config.library.maxNumberOfItems = 15
         let picker = YPImagePicker(configuration: config)

         picker.didFinishPicking { [unowned picker] items, cancelled in
             for item in items {
                 switch item {
                 case .photo(let photo):
                    self.executeCoredata(tempImage: photo.image)

                     self.tableView.reloadData()
                 case .video(let video):
                     print(video)
                 }
             }
             picker.dismiss(animated: true, completion: nil)
         }
         present(picker, animated: true, completion: nil)

}



func executeCoredata(tempImage: UIImage) {

    let moc = CoredataStack.shared.persistentContainer.viewContext

             guard let imageData = tempImage.jpegData(compressionQuality: 1) else {
                                  // handle failed conversion
                                  print("jpg error")
                                  return
                              }


            let coreProduct = Product(context: moc)
            coreProduct.id = Int32(randomNumber())
            coreProduct.name = randomString(length: 6)
            let imageToStore = coreProduct.image?.mutableCopy() as! NSMutableSet

            let coreImage = Images(context: moc)
            coreImage.image = imageData
            coreImage.name = randomString(length: 5)
            imageToStore.add(coreImage)

    let randomInt = Int.random(in: 1...2)

    if randomInt == 1{
        coreImage.isUploading = true
    }
    if randomInt == 2{
        coreImage.isUploading = false

    }

            coreProduct.image = imageToStore.copy() as? NSSet


            CoredataStack.shared.saveContext()
            self.dismiss(animated: true, completion: nil)
            checkDataAvailibility()
        }


    And showing the product in my table view like: -

   func checkDataAvailibility() {
   let request: NSFetchRequest<Product>  = Product.fetchRequest()
   let sortByName = NSSortDescriptor(key: "id", ascending: true)
          let sortDescriptors =  [sortByName]

          request.sortDescriptors = sortDescriptors
    let moc = CoredataStack.shared.persistentContainer.viewContext
       do {
           let imageCount = try moc.count(for: request)

           if imageCount > 0{
               productList = try moc.fetch(request)

           }

       }catch {
                     fatalError("Error in counting home record")
                 }

   DispatchQueue.main.async {
       self.tableView.reloadData()
   }

   }


   //MARK: Tableview Datasource
   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    print(productList.count)
    return productList.count

}

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? productCell else {
        return UITableViewCell()
    }
    cell.productId.text = String(productList[indexPath.row].id)
    cell.productName.text = productList[indexPath.row].name

    let nsarr = productList[indexPath.row].image!.allObjects as NSArray

    for item in nsarr as! [Images]{

        cell.imageView?.image = UIImage(data: item.image!)
        cell.imageName.text = item.name
        if item.isUploading == true{
            cell.isUploading.text = "isUploading"
        }
        else{
             cell.isUploading.text = "Uploaded"
        }

        print("upload status: \(item.isUploading)")

    }


    return cell

}
@IBAction func fetchImageFromLibrary(\uSender:ui按钮){
var config=YPImagePickerConfiguration()
config.library.maxNumberOfItems=15
让picker=YPImagePicker(配置:config)
picker.didFinishPicking{[unowned picker]项目,在中取消
对于项目中的项目{
开关项{
案例。照片(让我们拍照):
self.executeCoredata(tempImage:photo.image)
self.tableView.reloadData()
案例.视频(let视频):
打印(视频)
}
}
picker.disclose(动画:true,完成:nil)
}
当前(选择器,动画:真,完成:无)
}
func executeCoredata(tempImage:UIImage){
让moc=CoredataStack.shared.persistentContainer.viewContext
guard let imageData=tempImage.jpegData(压缩质量:1)其他{
//句柄转换失败
打印(“jpg错误”)
返回
}
让coreProduct=产品(上下文:moc)
coreProduct.id=Int32(randomNumber())
coreProduct.name=randomString(长度:6)
将imageToStore=coreProduct.image?.mutableCopy()设为!NSMutableSet
让coreImage=图像(上下文:moc)
coreImage.image=图像数据
coreImage.name=randomString(长度:5)
imageToStore.add(coreImage)
设randomInt=Int.random(in:1…2)
如果随机化==1{
coreImage.isupload=true
}
如果randomInt==2{
coreImage.isupload=false
}
coreProduct.image=imageToStore.copy()作为?NSSet
CoredataStack.shared.saveContext()文件
self.disclose(动画:true,完成:nil)
CheckDataAvailability()
}
并在我的表视图中显示产品,如:-
func checkdataavailability(){
let请求:NSFetchRequest=Product.fetchRequest()
让sortByName=NSSortDescriptor(键:“id”,升序:true)
让sortDescriptors=[sortByName]
request.sortDescriptors=sortDescriptors
让moc=CoredataStack.shared.persistentContainer.viewContext
做{
让imageCount=尝试moc.count(for:request)
如果imageCount>0{
productList=尝试moc.fetch(请求)
}
}抓住{
fatalError(“主记录计数错误”)
}
DispatchQueue.main.async{
self.tableView.reloadData()
}
}
//标记:Tableview数据源
func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
打印(productList.count)
return productList.count
}
func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
guard let cell=tableView.dequeueReusableCell(标识符为“cell”)作为?productCell else{
返回UITableViewCell()
}
cell.productId.text=String(productList[indexath.row].id)
cell.productName.text=productList[indexPath.row].name
让nsarr=productList[indexath.row].image!.allObjects作为NSArray
对于nsarr as中的项目![图像]{
cell.imageView?.image=UIImage(数据:item.image!)
cell.imageName.text=item.name
如果item.isUploading==true{
cell.isupload.text=“isupload”
}
否则{
cell.isupload.text=“上传”
}
打印(“上载状态:\(item.isUploading)”)
}
返回单元
}
我的问题是-我想根据图像状态在表视图中显示数据。这意味着,如果状态为上载,则应显示图像。如何做到这一点