Swift 获取核心数据会导致重复项
在我的Swift 获取核心数据会导致重复项,swift,core-data,Swift,Core Data,在我的iOSXcode8项目中,我使用Swift,对我的核心数据执行获取: func searchFoods() { let context: NSManagedObjectContext = appDel.managedObjectContext let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Foods") print("Searching Database for \(s
iOS
Xcode8
项目中,我使用Swift
,对我的核心数据执行获取
:
func searchFoods() {
let context: NSManagedObjectContext = appDel.managedObjectContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Foods")
print("Searching Database for \(searchVariable)...")
var subPredicates : [NSPredicate] = []
let codeSearch = NSPredicate(format: "codeText contains[c] %@", "\(searchVariable)")
subPredicates.append(codeSearch)
request.predicate = NSCompoundPredicate(orPredicateWithSubpredicates: subPredicates)
request.returnsObjectsAsFaults = false
do {
let results = try context.fetch(request)
if results.count > 0 {
for result in results as! [NSManagedObject] {
if let item = result.value(forKey: "title") as? String {
// Maybe put a loop of some kind to only append the found item count??
searchArray.append(item)
myTableView.reloadData()
}
}
}
} catch {
print("Fetch failed...")
}
}
func searchFoods(){
let context:NSManagedObjectContext=appDel.managedObjectContext
let request=NSFetchRequest(entityName:“食品”)
打印(“正在数据库中搜索\(searchVariable)…”)
var子预测:[NSPredicate]=[]
让codeSearch=NSPredicate(格式:“codeText包含[c]]@”,“\(searchVariable)”)
subPredicates.append(代码搜索)
request.predicate=NSCompoundPredicate(或predicatewithsubpredicates:subPredicates)
request.returnsObjectsAsFaults=false
做{
let results=try context.fetch(请求)
如果results.count>0{
对于结果,结果为![NSManagedObject]{
如果let item=result.value(forKey:“title”)为?字符串{
//可能会设置某种循环,只附加找到的项目计数??
searchArray.append(项)
myTableView.reloadData()
}
}
}
}抓住{
打印(“获取失败…”)
}
}
然而,我的searchArray
是一个[String]
的搜索结果,创建了许多重复的搜索结果,我知道它们并不存在;它列出了两三次。无法理解如何将追加限制为仅结果计数。如果我搜索水果,它可能会返回一个数组
,比如香蕉、草莓、桃子、桔子、香蕉、草莓、桃子、桔子
等等,重复。有人能帮忙吗?代码中没有任何内容会导致获取结果重复。如果它们实际上不存在于持久性存储中,可能的原因是您正在执行以下操作:
searchArray.append(item)
但没有任何迹象表明过去的结果会被清除。示例结果与此一致——如果有四个结果,则将它们添加到数组中一次,然后再添加一次
您的表视图数据源方法也可能有问题,但您可能直接从searchArray
的内容来驱动这一点。显而易见的问题是,您如何知道它们并不存在?因为我正在测试这个应用程序,每次运行应用程序时,我都会删除所有以前的数据并将新数据加载到CoreData中。我再次在这一点上进行测试。我查看了代码的另一个区域,你是对的,我没有清除以前的结果。非常感谢。