我正在JSON
数据中实施搜索,其中包含HTML
格式的数据。
问题是数据非常大。
我必须在图像中显示匹配的颜色搜索:
例如,我搜索了How
:
我的搜索流程就像那样:
步骤1: - 检查是否存在数据
第2步: - 从搜索内容中删除Html标签
步骤3: - 在内容中执行搜索 使用NSRange rangeOfString选项
第4步: - 如果找到匹配。用句子打破句子内容 componentSeparatedByString (因为我必须显示我找到了搜索的句子)
步骤5: - 将句子传递给返回我的函数 归因字符串
步骤6: - 在数组中添加结果并重新加载表
我正在TextField
委托方法shouldChangeCharactersInRange
问题是我的桌子延迟了1到2秒。
如果键入为快,那么假设我搜索Animal
,那么我会搜索ani
anim
并最后搜索animal
。
如何加强搜索。
答案 0 :(得分:1)
我的建议如下:
<强>制备强>
步骤1和2.不要在每次搜索时重复这些步骤,在开始搜索之前或仅在第一次搜索期间执行一次。
附加步骤:将文本拆分为句子。您将输入NSArray
个句子作为输入。
搜索强>
使用搜索文字构建NSPredicate
(例如contains[cd]
)。使用该谓词过滤输入数组。那应该非常快。
重新加载表格以显示结果。不要在这里使用属性字符串。
<强>高亮强>
在显示单元格时使用当前搜索文本突出显示(生成属性字符串)。您将仅突出显示实际显示的内容,因此这应该非常快。
可能的改进
去抖 - 搜索文本更改后不要立即开始搜索。启动计时器,将在0.1-0.5秒内搜索。如果有更新的搜索文本更新,请取消之前的计时器并开始新计时。这会将多个更新合并为一个更新。
使用以前的搜索结果 - 如果上一个搜索文本是新搜索文本的子字符串,则只能搜索以前的结果,即搜索的数据较少。
如果搜索仍然太慢(如果您确实有大量文本),请在不同的调度队列中执行搜索并显示活动指示符,直到结果完成。