首页 > 解决方案 > 在不同类型的数组中循环以找到匹配的数组

问题描述

我正在尝试使用 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。我真的很困惑。

标签: iosarraysswiftcore-data

解决方案


如果您想保存多条记录,您检查空实体的方法将不起作用。

向 fetch 请求添加谓词,并将结果限制为 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
    }
}

推荐阅读