从Core Data中删除 Swift 4

3

我有一个收藏按钮,当点击时会将特定角色的图像添加到CoreData中。

@IBAction func favButtonClicked(_ sender: UIButton) {
    if sender.isSelected != true {
        saveFav()
    }     
}   

func saveFav() {

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let newFav = NSEntityDescription.insertNewObject(forEntityName: "Favorite", into: context)
    newFav.setValue((figure?.image)!, forKey: "favFig")

    do {
        try context.save()
        print("Saved!")
    } catch {
        //Process Error
    }
}

我的问题是,当再次点击按钮时,如何从CoreData中删除那张图片?

1个回答

6
在CoreData中,如果您想删除每个对象,则该对象应具有ID,如下所示:
let fetchRequest: NSFetchRequest<Favorite> = Favorite.fetchRequest()
fetchRequest.predicate = Predicate.init(format: "FavoriteID==\(ID)")

do {
    let objects = try context.fetch(fetchRequest)
    for object in objects {
        context.delete(object)
    }
    try context.save()
} catch _ {
    // error handling
}

1
必须将FavoriteID添加到原始模型结构中。 - Shehata Gamal
数据来自JSON文件,用于填充表视图和详细视图控制器。单击favButton将图像添加到CoreData中的“favFig”,这是唯一的属性。 - Medicine Man
@Sh_Khan,从代码中并不清楚(ID)是用来做什么的?我认为这个解决方案并不是最好的方式,即使它能够工作。创建一个像FavoriteID这样的新ID是多余和误导性的,因为每个CoreData managedObject都有一个ID!最好使用它。 - BootMaker
@Sh_Khan 是的,每个被管理对象都有一个名为NSManagedObjectID的唯一键,详见苹果文档:https://developer.apple.com/documentation/coredata/nsmanagedobjectid - BootMaker
@BootMaker,您所说的ID是用于在不同线程之间传递 moc 的ID,但是无法确定特定 image 位于哪个 managedObject 中。 - PaFi
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接