Ios 如何在按下UI按钮后从核心数据中删除对象?
目前我有一个UICollectionViewCell,当按下按钮(右上角的X)时,它应该从coreData中删除,然后重新加载UICollectionView: 到目前为止,当我按下“X”按钮时,什么也没有发生,尽管我注意到在我停止模拟器并将其重新打开后,保存在coreData中的所有项目都消失了。相反,应该发生的只是按下“X”后需要立即消失并从coreData中删除的特定单元格。代码如下:Ios 如何在按下UI按钮后从核心数据中删除对象?,ios,swift,core-data,uicollectionview,uicollectionviewcell,Ios,Swift,Core Data,Uicollectionview,Uicollectionviewcell,目前我有一个UICollectionViewCell,当按下按钮(右上角的X)时,它应该从coreData中删除,然后重新加载UICollectionView: 到目前为止,当我按下“X”按钮时,什么也没有发生,尽管我注意到在我停止模拟器并将其重新打开后,保存在coreData中的所有项目都消失了。相反,应该发生的只是按下“X”后需要立即消失并从coreData中删除的特定单元格。代码如下: // MARK: CoreData func getContext () -> NSM
// MARK: CoreData
func getContext () -> NSManagedObjectContext {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
return appDelegate.persistentContainer.viewContext
}
func deleteFromCoreData() -> Void {
let moc = getContext()
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Movie")
let result = try? moc.fetch(fetchRequest)
let resultData = result as! [Movie]
for object in resultData {
moc.delete(object)
}
do {
try moc.save()
print("saved!")
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
} catch {
}
}
@IBAction func deleteButtonPressed(_ sender: Any) {
self.deleteFromCoreData()
DispatchQueue.main.async {
self.collectionView?.reloadData()
}
}
//标记:CoreData
func getContext()->NSManagedObjectContext{
让appDelegate=UIApplication.shared.delegate为!appDelegate
返回appDelegate.persistentContainer.viewContext
}
func deleteFromCoreData()->Void{
让moc=getContext()
let fetchRequest=NSFetchRequest(entityName:“电影”)
let result=try?moc.fetch(fetchRequest)
让resultData=结果为![电影]
对于resultData中的对象{
主运行中心删除(对象)
}
做{
试试moc.save()
打印(“已保存!”)
}将let错误捕获为NSError{
打印(“无法保存\(错误),\(错误.用户信息)”)
}抓住{
}
}
@iAction func DeleteButton已按下(\发送方:任意){
self.deleteFromCoreData()
DispatchQueue.main.async{
self.collectionView?.reloadData()
}
}
在获取中似乎没有使用谓词。您实际上是在选择每个“电影”对象,然后循环删除每个对象。我对核心数据还是新手,您如何使用谓词仅删除当前选定的对象?在提取之前,您将分配NSPredicate;类似于fetchRequest.predicate=NSPredicate(格式:“movieTitle==%@”,“Logan”)和“movieTitle”,这是我编造的…它应该是您要筛选的数据模型中字段的名称。您在获取中似乎没有使用谓词。您实际上是在选择每个“电影”对象,然后循环删除每个对象。我对核心数据还是新手,您如何使用谓词仅删除当前选定的对象?在提取之前,您将分配NSPredicate;类似于fetchRequest.predicate=NSPredicate(格式:“movieTitle==%@”,“Logan”)和“movieTitle”,这是我编造的……它应该是您想要过滤的数据模型中字段的名称。