首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从iOS应用程序在服务器上实现动态搜索的最佳方式是什么?

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

Stack Overflow用户
提问于 2013-08-01 17:54:54
回答 1查看 753关注 0票数 1

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

以下是我想要实现的目标:

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

它们的数量可以超过数百个。

我开发的客户端应用程序有一个搜索团队成员的选项。

我想动态地实现它:

例如,当用户打印第一个字母a时,我向服务器查询,得到所有匹配的字母: Antuan,BArrow等。

然后,用户print ab和我进行查询,该查询必须返回亚伯拉罕、阿不都拉等。所有匹配结果都显示在UITableView中。

每次在UITextField中发送文本时,都会向服务器发出HTTP查询。我用dispatch_async实现了它:在UITextFieldTextDidChangeNotification上,我创建了一个dispatch_async,在其中我用searchbar.text发出了一个HTTP请求。

问题是:它的运行速度非常慢。我经常得到一个异常的bad selector was sent to the instance

所以我的问题是:

为什么我的方法不好?对此有什么更好的解决方案?

或者动态搜索,这是一个非常糟糕的想法,我必须在点击某个按钮后才能进行搜索?

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

EN

回答 1

Stack Overflow用户

发布于 2013-08-01 20:41:07

每次有人输入字符时发出HTTP请求可能永远不会足够快(这也没有真正的意义--继续读下去)。对于特定大小的列表,答案是在您呈现字段时(但在用户开始键入该字段之前)在后台拉出整个列表。一旦您有了列表,您就可以在内存中开始在本地设备上进行匹配。“超过数百个”并不是很具体,这取决于网络速度,但我猜如果您的列表的有效负载大小小于50K,那么拉出整个列表将是最简单的方法。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17990755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档