Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift 3:按下UIB按钮时如何删除核心数据中的单个记录_Ios_Xcode_Core Data_Swift3 - Fatal编程技术网

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)")
    }