【发布时间】:2017-04-15 23:19:32
【问题描述】:
我一直在研究如何使用 NSFetchResultController 进行搜索,但我遇到的大多数帖子都是 2 年前的。好的,我正在尝试过滤对象,在我的情况下是口袋妖怪。这是我正在使用的函数。
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 处,即第 2 代口袋妖怪,在搜索时,将出现来自不同世代的其他口袋妖怪。我不确定它是否是我初始化上下文的方式。这就是我的搜索栏功能的样子。
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar == pokemonSearchBar {
let text = pokemonSearchBar.text!
self.attemptPokemonFetch(name: text)
collectionView.reloadData()
}
}
另一个例子:假设我有 3 种类型的人,有些是瘦的、正常的和胖的。当我在瘦人的索引中时,我只想搜索瘦的人而不是所有人。那么我需要做些什么来实现这种行为。
非常感谢任何帮助。 :)
【问题讨论】:
标签: ios search core-data swift3 nsfetchedresultscontroller