Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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
Swift 获取核心数据会导致重复项_Swift_Core Data - Fatal编程技术网

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中。我再次在这一点上进行测试。我查看了代码的另一个区域,你是对的,我没有清除以前的结果。非常感谢。