将图像设置为coredata

时间:2017-12-11 11:02:34

标签: ios swift core-data

我有一个tableviewcells列表已加载。在每个单元格旁边都有一个“添加到收藏夹”按钮。当单击“添加到收藏夹”时,其上的图像将会更改,并且已更改的图像应存储到coredata中,以便在再次运行应用程序时,我可以知道哪个单元格被收藏。为此,这是经过尝试的......

        func favoriteBtnTapped(cell: HistoryTableViewCell) {

            if segmentControl.selectedSegmentIndex == 2 {
                favBtnTapFlag = true
                if let indexPath = tableview?.indexPath(for: cell) {

                    let myFavMsg = messages1[indexPath.row]
                    let likedMsg = myFavMsg.historyData


                    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
                        return
                    }
                    let managedContext = appDelegate.persistentContainer.viewContext

                    let entity = NSEntityDescription.entity(forEntityName: "FavoritedMessages", in: managedContext)

                    let category = NSManagedObject(entity: entity!, insertInto: managedContext)

                    category.setValue(likedMsg, forKeyPath: "favData")


//New image is set on the cell and it is saved to coredata here...                    
                    cell.favoriteButton.setImage(UIImage(named: "pin"), for: .normal)
    let imageData = UIImageJPEGRepresentation((cell.favoriteButton.imageView?.image)!, 1)

                    category.setValue(imageData, forKey: "favImage")
                    do {

                        try managedContext.save()
                      self.favMessages.append(category as! FavoritedMessages)


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

它在viewWillAppear中被提取,就像这样......

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    guard let appDelegate =
        UIApplication.shared.delegate as? AppDelegate else {
            return
    }

    let managedContext =
        appDelegate.persistentContainer.viewContext

    let fetchRequest =
        NSFetchRequest<NSManagedObject>(entityName: "Messages")

    let fetchRequest1 = NSFetchRequest<NSManagedObject>(entityName: "FavoritedMessages")

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

        favMessages = try managedContext.fetch(fetchRequest1 as! NSFetchRequest<NSFetchRequestResult>) as! [FavoritedMessages]

        for result in favMessages as [FavoritedMessages] {

            if let imageData = result.value(forKey: "favImage") as? NSData {
                if let image = UIImage(data:imageData as Data) as? UIImage {
                   favoritedImage.image = image 

                }
            }
        }

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

这里favoritedImage.image = image我正在尝试将获取的图像分配给imageview变量,然后在cellForRow中分配它。但是如何做到这一点我不确定......

1 个答案:

答案 0 :(得分:1)

您不应该将图像保存在coredata中。

在coredata中使用favourite_status保存模型为1.(0 =&gt;不利,1 =&gt; favourited)。 (基本上是布尔值) 根据favourite_status从应用包中加载图片。

加载单元格时也使用favourite_status加载图像。

///已编辑

func favoriteBtnTapped(cell: HistoryTableViewCell) {

     //1. Get Entity from datasource(Array) using indexpath.row
     //2. Favorite the entity by setting favaorite_status = 1  
     //3. Save to coredata also
     //4. Reload Table view 

}


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

     //1. Get Entity from datasource(Array) using indexpath= Array
     //2. Set cell image based on favaorite_status. Use UIImage.init(name:””) (if favaorite_status  == 0, imagename will be different)

}