UISearchController 和 UITableView 支持 Core Data iOS 8

Posted

技术标签:

【中文标题】UISearchController 和 UITableView 支持 Core Data iOS 8【英文标题】:UISearchController with UITableView backed by Core Data iOS 8 【发布时间】:2015-07-23 17:44:10 【问题描述】:

虽然似乎有很多关于 UISearchControllers 的信息,但我发现的许多方法在 ios 8 中已被弃用。我发现的大多数教程都使用了已弃用的 UISearchDisplayController,甚至 UISearchController 上的文档也使用了方便的方法也已被弃用。我正在寻找知道如何在由 iOS 8 中的核心数据支持的 UITableView 中成功搜索项目的人。

目前我有一个表格视图,它可以获取并显示从地图视图中保存的兴趣点。非常标准的样板文件 - 只是持久化和获取实体。具有挑战性的部分是添加一个 UISearchController,它最近取代了 UISearchDisplayController,到由核心数据支持的表视图(表视图显示任何持久保存到数据存储的兴趣点实体)。使用核心数据而不是标准数组是复杂性开始的地方,并且没有足够的文档使用这种特殊方法。接受任何和所有建议。

首先,让我们考虑一下,我已将从核心数据中获取的项目存储在一个可变数组中。我们将如何使用它来过滤我们的表格视图?

self.searchResults = [NSMutableArray arrayWithCapacity:[[self.fetchController fetchedObjects] count]];

【问题讨论】:

嗨。我认为你的问题,就目前而言,对于 SO 来说有点过于宽泛了。您能否详细说明您的具体情况:基本tableView是如何构建的;您希望它就地过滤,还是与搜索结果一起呈现一个新的 tableView?您要避免使用哪些已弃用的方法? Apple 弃用 UISearchDisplayController 后,似乎没有任何明确的文档。该问题的目的是在向已由核心数据支持的 tableview 添加搜索栏时打开最佳实践。 不推荐使用的方法是 UISearchDisplayController,它已被 UISearchController 取代。问题是似乎没有任何明确的文档可以将其与核心数据一起使用。我发现的大部分内容要么仍然使用 UISearchDisplayController,要么文档侧重于使用与核心数据相对应的标准数组。 【参考方案1】:

您应该使用NSFetchedResultsController 在表格视图中显示您的Core Data 支持的数据。请先阅读。样板文件可通过 Xcode 模板获得。

对于搜索,您可以例如只是使获取的结果控制器无效并让它懒惰地重新创建它。创建它时,为搜索词添加谓词。

UISearchController 将简单地帮助您跟踪通常的搜索事件,即搜索文本更改、范围更改、取消等。

【讨论】:

我已经完成了,我正在谈论过滤表格视图中的数据 什么不起作用?你实现UISearchResultsUpdating协议方法updateSearchResultsForSearchController(_:)了吗?您明确表示您使用的是数组,所以我也解决了这个问题。 我正在解决这个问题,我将在一天左右的时间里分享更多内容。我目前可以获取和检索数据,但我的问题是过滤表视图。您将如何使获取的结果控制器失效? 您关于使获取的结果控制器无效的建议为我指明了正确的方向,谢谢!

以上是关于UISearchController 和 UITableView 支持 Core Data iOS 8的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerView 和 UISearchController 不显示数据

显示和隐藏 uisearchcontroller 时调用的函数

如何同时使用 NSFetchedResultsController 和 UISearchController?

如何将 segmentedControl 和 UISearchController 作为 UITableViewController 标头? (以编程方式)

UISearchController:searchBar 和 scopeBar 在第一次触摸事件上重叠

使用 UISearchController 时,iOS 13 UIBarButtonItem 不可点击和重叠 UINavigationBars