Ios Swift 3:按下UIB按钮时如何删除核心数据中的单个记录
我有一个功能,我可以将配置文件添加到收藏夹列表(通过核心数据保存),当我想将其标记为非收藏夹时,它应该从核心数据和表格列表视图(收藏夹视图控制器)中删除 到目前为止,我所拥有的代码将从列表中删除所有记录,而不是删除特定记录 请查找以下代码:-Ios Swift 3:按下UIB按钮时如何删除核心数据中的单个记录,ios,xcode,core-data,swift3,Ios,Xcode,Core Data,Swift3,我有一个功能,我可以将配置文件添加到收藏夹列表(通过核心数据保存),当我想将其标记为非收藏夹时,它应该从核心数据和表格列表视图(收藏夹视图控制器)中删除 到目前为止,我所拥有的代码将从列表中删除所有记录,而不是删除特定记录 请查找以下代码:- @IBAction func saveFav(_ sender: UIButton) { let propertyToCheck = sender.currentTitle! var proID = saved_id let co
@IBAction func saveFav(_ sender: UIButton) {
let propertyToCheck = sender.currentTitle!
var proID = saved_id
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let task = FavProfile(context: context)
switch propertyToCheck {
case "Add to Favourite":
// Link Task & Context
task.busName = bussinessName
task.profileID = Int32(id!)!
print ("saved id is: - \(task.profileID)")
print ("saved profile name is: - \(task.busName)")
fav_remove_fav_button_label.setTitle("Remove From Favourite", for: .normal)
// Save the data to coredata
(UIApplication.shared.delegate as! AppDelegate).saveContext()
let _ = navigationController?.popViewController(animated: true)
let alert = UIAlertController(title: "Alert", message: "Added to your Favourite list", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
case "Remove from Favourite":
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "FavProfile")
let moc = getContext()
let result = try? moc.fetch(fetchRequest)
let resultData = result as! [FavProfile]
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 {
}
let alert = UIAlertController(title: "Alert", message: "Removed from your Favourite list", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
// self.favtable.tableView.reloadData()
default: break
}
}
@IBAction func saveFav(uu发送方:ui按钮){
让propertyToCheck=sender.currentTitle!
var proID=已保存的\u id
让上下文=(UIApplication.shared.delegate为!AppDelegate)。persistentContainer.viewContext
let task=FavProfile(上下文:context)
开关属性检查{
案例“添加到收藏夹”:
//链接任务和上下文
task.busName=业务名称
task.profileID=Int32(id!)!
打印(“保存的id为:-\(task.profileID)”)
打印(“保存的配置文件名称为:-\(task.busName)”)
fav_删除fav_按钮标签。setTitle(“从收藏夹中删除”,用于:。正常)
//将数据保存到coredata
(UIApplication.shared.delegate为!AppDelegate).saveContext()
let=navigationController?.popViewController(动画:true)
让alert=UIAlertController(标题:“alert”,消息:“添加到您最喜爱的列表”,首选样式:UIAlertControllerStyle.alert)
addAction(UIAlertAction(标题:“确定”,样式:UIAlertActionStyle.default,处理程序:nil))
self.present(警报、动画:true、完成:nil)
案例“从收藏夹中删除”:
let fetchRequest=NSFetchRequest(entityName:“FavProfile”)
让moc=getContext()
let result=try?moc.fetch(fetchRequest)
让resultData=结果为![FavProfile]
对于resultData中的对象{
主运行中心删除(对象)
}
做{
试试moc.save()
打印(“已保存!”)
}将let错误捕获为NSError{
打印(“无法保存\(错误),\(错误.用户信息)”)
}抓住{
}
让alert=UIAlertController(标题:“alert”,消息:“已从您最喜爱的列表中删除”,首选样式:UIAlertControllerStyle.alert)
addAction(UIAlertAction(标题:“确定”,样式:UIAlertActionStyle.default,处理程序:nil))
self.present(警报、动画:true、完成:nil)
//self.favtable.tableView.reloadData()
默认值:中断
}
}
我不知道我需要在这里修复什么,只删除特定的记录
谢谢你的时间和努力
屏幕1,当我将个人资料标记为收藏夹时:
屏幕2当我将同一个人资料标记为“非收藏夹”时:
屏幕3,当我再次重新启动应用程序时:
我试图将第二个配置文件标记为“非收藏夹”,它不会更新tableview。当我重新启动应用程序时,它会显示“Label”let predicate=NSPredicate(格式:“name=%@and type==%@”,“您的目标名称”,“您的目标类型”)
var fetchedEntities=[TrackTable]()
let fetchRequest=NSFetchRequest(entityName:“TrackTable”)
fetchRequest.predicate=谓词
做{
fetchedEntities=try!managedContext?.fetch(fetchRequest)as![TrackTable]
对于fetchedEntities中的序列
{
managedContext?删除(顺序)
}
抓住
{
}
}
在上面的谓词中,name
和type
是您要删除特定实体的表实体。let predicate=NSPredicate(格式:“name=%@和type==%@”,“您的目标名称”,“您的目标类型”)
* Add a Predicate Like given below to search for a particular item from the list of Favourites using it's unique profile Id. Search for that item in it's entity and delete that item from core data.
*****************************************
let predicateFavs = NSPredicate(format: “profileID = %@", String(describing: id!))
let favList = CoreDataHandler.sharedInstance.fetchEntityWithName(“FavProfile”, predicate: predicateFavs) as! [FavProfile]
context.performAndWait({
for object in favList{
self.context.delete(object)
}
do {
try self.context.save()
} catch {
print("error : \(error)")
}
})
********************************************
func fetchEntityWithName(_ entityName : NSString, predicate: NSPredicate) -> NSArray{
// Create Entity Description
let entityDescription = NSEntityDescription.entity(forEntityName: entityName as String, in: context)
// Initialize Fetch Request
let fetchRequest = NSFetchRequest<NSFetchRequestResult>()
// Configure Fetch Request
fetchRequest.entity = entityDescription
fetchRequest.predicate = predicate
var result = NSArray()
do {
result = try context.fetch(fetchRequest) as NSArray
print(result)
} catch {
let fetchError = error as NSError
print(fetchError)
}
return result
}
var fetchedEntities=[TrackTable]()
let fetchRequest=NSFetchRequest(entityName:“TrackTable”)
fetchRequest.predicate=谓词
做{
fetchedEntities=try!managedContext?.fetch(fetchRequest)as![TrackTable]
对于fetchedEntities中的序列
{
managedContext?删除(顺序)
}
抓住
{
}
}
在上面的谓词中,name
和type
是您要删除特定实体的表实体。*添加一个如下谓词,使用其唯一的配置文件Id从收藏夹列表中搜索特定项。在其实体中搜索该项,并从核心数据中删除该项。
* Add a Predicate Like given below to search for a particular item from the list of Favourites using it's unique profile Id. Search for that item in it's entity and delete that item from core data.
*****************************************
let predicateFavs = NSPredicate(format: “profileID = %@", String(describing: id!))
let favList = CoreDataHandler.sharedInstance.fetchEntityWithName(“FavProfile”, predicate: predicateFavs) as! [FavProfile]
context.performAndWait({
for object in favList{
self.context.delete(object)
}
do {
try self.context.save()
} catch {
print("error : \(error)")
}
})
********************************************
func fetchEntityWithName(_ entityName : NSString, predicate: NSPredicate) -> NSArray{
// Create Entity Description
let entityDescription = NSEntityDescription.entity(forEntityName: entityName as String, in: context)
// Initialize Fetch Request
let fetchRequest = NSFetchRequest<NSFetchRequestResult>()
// Configure Fetch Request
fetchRequest.entity = entityDescription
fetchRequest.predicate = predicate
var result = NSArray()
do {
result = try context.fetch(fetchRequest) as NSArray
print(result)
} catch {
let fetchError = error as NSError
print(fetchError)
}
return result
}
*****************************************
让predicateFavs=NSPredicate(格式:“profileID=%@”,字符串(描述:id!))
让favList=CoreDataHandler.sharedInstance.fetchEntityWithName(“FavProfile”,谓词:predicateFavs)作为![FavProfile]
context.performAndWait({
对于favList中的对象{
self.context.delete(对象)
}
做{
尝试self.context.save()
}抓住{
打印(“错误:\(错误)”)
}
})
********************************************
func fetchEntityWithName(entityName:NSString,谓词:NSPredicate)->NSArray{
//创建实体描述
让entityDescription=NSEntityDescription.entity(forEntityName:entityName作为字符串,在:上下文中)
//初始化提取请求
让fetchRequest=NSFetchRequest()
//配置提取请求
fetchRequest.entity=entityDescription
fetchRequest.predicate=谓词
var result=NSArray()
做{
结果=尝试使用context.fetch(fetchRequest)作为NSArray
打印(结果)
}抓住{
让fetchError=错误为NSError
打印(获取错误)
}
返回结果
}
*添加一个如下所示的谓词,使用它从收藏夹列表中搜索特定项
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "FavProfile")
let predicate = NSPredicate(format: "profileID == %@", id as CVarArg)
fetchRequest.predicate = predicate
let moc = getContext()
let result = try? moc.fetch(fetchRequest)
let resultData = result as! [FavProfile]
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)")
}