2017-07-18 70 views
1

在我iOSXcode8項目中使用Swift,我執行fetchCore-Data取正導致重複項

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...") 
    } 

} 

但是我searchArray創建的搜索結果的[String]我所知道的許多重複不在那裏;它列出他們2到3次。無法弄清楚如何將附加限制爲結果計數量。如果我搜索水果,它可能會返回像bananas, strawberries, peaches, oranges, bananas, strawberries, peaches, orangesarray,重複。有人可以幫忙嗎?

+0

現在最明顯的問題是,你怎麼知道他們不是真的存在? –

+0

因爲我正在測試這個應用程序,並且每次運行應用程序時都刪除所有以前的數據並將新數據加載到CoreData中。我現在再次測試。去住它不會是這樣。 – ChallengerGuy

回答

0

代碼中沒有任何內容會導致獲取結果中出現重複。如果他們不持久存儲實際存在,可能的原因是,你這樣做:

   searchArray.append(item) 

但有根本不可能清理掉過去的結果標誌。您的示例結果與此一致 - 如果有四個結果,則將它們添加到數組中一次,然後再次添加它們。

這也有可能是有一個與你的表視圖的數據源的方法有問題,但你可能會開車直接從searchArray內容。

+0

我查看了我的代碼的另一個區域,你說得對,我沒有清除以前的結果。謝謝。 – ChallengerGuy