ios - 从 iOS 应用程序在服务器上实现动态搜索的最佳方式是什么?

标签 ios cocoa-touch search grand-central-dispatch

我正在努力解决实现动态搜索的问题。

这里是我想要实现的:

在我的应用程序中有一个选项,用户(项目经理)将能够搜索他的团队成员。每个 PM 在服务器端(Web 服务)都有自己的帐户,它是一个表 team_members,其中包含与该经理对应的所有团队成员。
他们的数量可能超过数百。

我开发的客户端应用程序有一个选项搜索团队成员。
我想动态实现它:
例如,当用户打印第一个字母 a 时,我向服务器查询并获得所有与字母匹配的内容:Antuan、BArrow 等。

然后用户打印 ab 并且我进行查询,该查询必须返回 Abraham、Abdulla 等。依此类推。所有匹配结果显示在UITableView中。
每次 UITextField 中的文本更改时,都会对服务器进行 HTTP 查询。我使用 dispatch_async 实现它:在 UITextFieldTextDidChangeNotification 上,我创建了一个 dispatch_async,我在其中使用 searchbar.text 发出 HTTP 请求.

问题:它工作起来很慢。我经常遇到异常 错误的选择器被发送到实例

所以我的问题是:
为什么我的方法不好?什么是更好的解决方案?
或者动态搜索是一个非常糟糕的主意,我必须只在单击某个按钮时进行搜索?

谢谢。我希望一些有经验的 iOS 开发者能给我很好的建议。

最佳答案

每次有人键入一个字符时都发出 HTTP 请求可能永远都不够快(这也没有意义——请继续阅读)。对于特定大小的列表,答案是在您显示该字段时(但在用户开始输入之前)在后台拉出整个列表。获得列表后,您可以在本地设备的内存中开始匹配。 “数百个以上”不是很具体,它取决于网络速度,但我猜想如果您的列表的负载大小小于 50K,那么拉取整个内容将是最简单的方法。

如果列表太大而不实用,但受用户输入的第一个字符限制的列表不是太大,那么最好的方法可能是等待第一个字符,异步触发你的 HTTP 请求,并且只有在您收到包含以该字母开头的所有项目的响应后才开始动态匹配。要记住的一件事是:如果您的列表受第一个字符限制,那将是您必须发出的唯一 HTTP 请求(除非用户更改第一个字符),因为以该字母开头的所有可能性都将在其中列表。从那里,您可以在本地缩减列表,而无需任何进一步的 HTTP 请求。

至于为什么会出现异常,如果没有看到您的实际代码就很难说。尝试在 Xcode 中设置异常断点。这将允许您在抛出异常时停止在调试器中,这将向您显示导致异常的原因。

关于ios - 从 iOS 应用程序在服务器上实现动态搜索的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17990755/

相关文章:

ios - 以编程方式调用 iOS 应用程序扩展

android - 当应用在Android和iOS上显示为屏幕外时执行代码

ios - 显示键盘时 UIAlertView 消息未正确显示

search - 基于联系人标签的 Gmail 过滤器

javascript检查元素是否包含数组的某些部分

ios - EKEvent 将相同的事件添加到日历

ios - Intel XDK 如何仅针对 iPhone 构建?

ios - 核心数据 : handle the case when iCloud turns off/on

iphone - 如何检测 UIImage 中的 alpha 像素

c# - 将具有命名过滤器的ElasticSearch聚合查询转换为NEST C#