0
我一直在尋找如何使用NSFetchResultController進行搜索,但我遇到的大多數帖子都來自2年前。好吧,我試圖過濾對象,在我的情況下是口袋妖怪。這是我使用的功能。使用NSFetchResult控制器搜索
func attemptPokemonFetch(generation: String = "1", name: String = "") {
let context = coreData.persistentContainer.viewContext
let request: NSFetchRequest<Pokemon> = Pokemon.fetchRequest()
let sortByName = NSSortDescriptor(key: "id", ascending: true)
request.sortDescriptors = [sortByName]
request.predicate = NSPredicate(format: "generation = %@", generation)
if !name.isEmpty {
request.predicate = NSPredicate(format: "name CONTAINS[cd] %@", name)
}
let controller = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
controller.delegate = self
self.controller = controller
do {
try controller.performFetch()
}
catch let err {
print(err)
}
}
我在視圖中調用該函數進行加載,搜索欄確實改變了文本,並且段改變了索引值。我知道如何過濾口袋妖怪並使用搜索。然而,我遇到的問題是當我開始搜索。當在特定代中搜索一個寵物小精靈時,其他口袋妖怪也會出現。所以我會在第二代寵物小精靈的索引2處尋找,並且在搜索時會出現不同世代的其他寵物小精靈。我不確定它是如何初始化上下文的。這是我的搜索欄功能的樣子。
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar == pokemonSearchBar {
let text = pokemonSearchBar.text!
self.attemptPokemonFetch(name: text)
collectionView.reloadData()
}
}
又如:可以說我有3種類型的人有些是瘦,正常和脂肪。當我在瘦人的索引中時,我只想尋找那些不是所有人都很瘦的人。那麼,我需要做些什麼來實現這種行爲。
真的很感激任何幫助。 :)
謝謝馬丁,只是我想要的行爲。我不知道你可以添加AND到NSPredicate格式。新的使用謂詞,所以林想知道是否可以有一個OR。例如,讓我們說在搜索欄中,我可以讓他們按名稱搜索或通過pokemon標識進行搜索。這將如何工作? –
@LuisRamirez:還有一個「OR」。查閱「Predicate編程指南」,您將在其中找到語法的描述。 –