在不同类型的数组中循环查找匹配的数组

时间:2018-08-11 15:50:13

标签: ios arrays swift core-data

我正在尝试使用CoreData将收藏夹按钮添加到我的应用程序中。

我有tableView并在其中添加了收藏夹按钮,当我按该特定行时可以保存标签。我成功保存了。但是我只想为该特定行填充一次CoreData。

           var checkFav = [Fav]()

我创建了一个类型为Fav的数组,这是我为CoreData填充的类的类的名称,我必须检查它们是否仅出现一次。

           let result = try context.fetch(Fav.fetchRequest())
            checkFav = result as! [Fav]


            if checkFav.isEmpty{
                let fav = Fav(context: context)
                fav.name = name
                appDelegate.saveContext()
            }

在上面您看到我填充了阵列。

        do{
            let result = try context.fetch(Fav.fetchRequest())
            checkFav = result as! [Fav]


            if checkFav.isEmpty{
                let fav = Fav(context: context)
                fav.name = name
                appDelegate.saveContext()
            }
            else{
                let checkName = array[rowSelected]

                for value in checkFav{
                    if value.name == checkName{
                        print("You already have this name ")

                    }
                    else {
                        let fav = Fav(context: context)
                        fav.name = name
                        appDelegate.saveContext()
                    }

                }

            }



        } catch{
            print("Error")
        }

假设我们在CoreData中有两个名称“ john”,“ martha”,如果我按“ martha”的按钮,则不应再次添加。但是由于我的循环,当它在数组中看到“ john”时,它认为此名称不匹配,因此将“ martha”(同名)保存到CoreData中。

我如何检查包含即将出现的名称的checkFav数组(如果包含的话)不要再次保存。但是,如果没有,请添加到CoreData中。我真的很困惑。

1 个答案:

答案 0 :(得分:0)

如果要保存多个记录,则无法使用检查空实体的方法。

在获取请求中添加一个谓词,并将结果限制为1以检查特定名称。

此方法将名称作为参数,如果名称不存在,则添加一条记录。如果添加了条目,则返回true,否则返回false。此外,它传递了潜在的错误。

func addFavorite(for name : String) throws -> Bool {
    let request : NSFetchRequest<Fav> = Fav.fetchRequest()
    request.predicate = NSPredicate(format: "name = %@", name)
    request.resultsLimit = 1
    if let _ = try context.fetch(request).first {
       return false // record exists
    } else {
       let fav = Fav(context: context)
       fav.name = name
       appDelegate.saveContext()
       return true // record added
    }
}