ios - 在不同类型的数组中循环以找到匹配的数组
问题描述
我正在尝试使用 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。我真的很困惑。
解决方案
如果您想保存多条记录,您检查空实体的方法将不起作用。
向 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
}
}
推荐阅读
- haskell - 有人可以解释以下代码吗?使用haskell 检索矩阵的对角线?
- java - JSP c:import 在使用短名称别名时给出 java.net.SocketException
- boost - 如何使用 boost::spirit 来修改像正则表达式一样的字符串?
- python - python Json转换问题
- google-cloud-platform - 使用 Google Cloud SDK shell 运行 .sh 脚本
- javascript - document.getElementById 不记录我在表单中输入的值 - 返回 null
- http - 有没有办法使用通配符或服务路径列表修补实体
- java - Android:ListView 仅显示共享首选项保存的最后一项
- css - noUiSlider - 特定滑块的样式
- java - 如何通过 REST API 获取有关被中止或从未构建的竹子构建计划的信息?