坚持通过FetchedResultsController,Diffable Data Source和Collection



我有一个UICollectionView,我正在尝试让搜索栏在其中工作。我已经让酒吧出现了,但我还没有弄清楚在哪里调用我创建的功能,我觉得有点愚蠢(已经呆了几个小时,可能是循环的(。我目前正在使用可比较的数据源和NSFetchedResultsController来尝试执行搜索。这是我的代码:

我的函数建立我的fetchedResultsController并将其放在viewDidLoad

func setupFetchedResultsController() {
let request = NPCData.createfetchRequest()
request.fetchBatchSize = 30
if !currentSearchText.isEmpty {
request.predicate = NSPredicate(format: "title CONTAINS[c] %@ OR body CONTAINS[c] %@", currentSearchText, currentSearchText)
}
let sort = NSSortDescriptor (key: "title", ascending: true)
request.sortDescriptors = [sort]

fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: container.viewContext, sectionNameKeyPath: nil, cacheName: nil)
fetchedResultsController.delegate = self
do {
try fetchedResultsController.performFetch()
setupSnapshot()
} catch {
print ("Fetch failed")
}
}

我的代码建立我的搜索栏和搜索控制器:

private func setupSearchController() {
let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search"
navigationItem.searchController = searchController
}

func updateSearchResults(for searchController: UISearchController) {
guard let text = searchController.searchBar.text else { return }
currentSearchText = text
setupFetchedResultsController()
}

我还在UICollectionView Class的顶部放置了一个变量var currentSearchText = "",并且该类遵守NSFetchedResultsControllerDelegate, UISearchResultsUpdating协议。

我在viewDidLoad里打电话给setupFetchedResultsController()setupSearchController().

我在这里错过了什么?搜索栏出现了,但我搜索的任何内容都没有做任何事情,我希望它会更改我的收藏视图以仅显示我正在搜索的结果(如果我搜索单词"跑车",那么它应该只显示显示单词"跑车"的单元格,也不区分大小写(。

从 UISearchBar 调用更新方法 委托方法

func searchBar(_ searchBar: UISearchBar, 
textDidChange searchText: String)
{
//search in database using SearchText and update your view accordingly
}

不要忘记将 UISearchBar 实例的委托设置为 self。

希望有帮助。

相关内容

最新更新