我有UISearchDisplayController的UISearchBar部分,该部分用于显示来自本地CoreData和远程API的搜索结果。我要实现的是在远程API上进行搜索的“延迟”。当前,对于用户键入的每个字符,都会发送一个请求。但是,如果用户输入速度特别快,那么发送许多请求就没有意义:这将有助于等待用户停止输入。有办法实现吗?
阅读文档建议您等到用户明确点击搜索后,但就我而言,它并不理想。
性能问题。如果可以非常快速地执行搜索操作,则可以通过在委托对象上实现searchBar:textDidChange:方法来更新用户输入时的搜索结果。但是,如果搜索操作花费更多时间,则应等到用户点按“搜索”按钮,然后才能在searchBarSearchButtonClicked:方法中开始搜索。始终在后台线程中执行搜索操作,以避免阻塞主线程。这样可以在搜索运行时使您的应用对用户保持响应,并提供更好的用户体验。
向API发送许多请求不是本地性能的问题,而仅仅是避免远程服务器上的请求率过高。
谢谢
通过此链接,我找到了一种非常快捷,干净的方法。与Nirmit的答案相比,它缺少“加载指示器”,但是在代码行数方面胜出,并且不需要其他控件。我首先将该dispatch_cancelable_block.h
文件添加到了我的项目(来自此repo),然后定义了以下类变量:__block dispatch_cancelable_block_t searchBlock;
。
我的搜索代码现在看起来像这样:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if (searchBlock != nil) {
//We cancel the currently scheduled block
cancel_block(searchBlock);
}
searchBlock = dispatch_after_delay(searchBlockDelay, ^{
//We "enqueue" this block with a certain delay. It will be canceled if the user types faster than the delay, otherwise it will be executed after the specified delay
[self loadPlacesAutocompleteForInput:searchText];
});
}
笔记:
loadPlacesAutocompleteForInput
是金LPGoogleFunctions库searchBlockDelay
在之外定义如下@implementation
:静态CGFloat searchBlockDelay = 0.2;
我正在做一个项目,处理一个电子邮件地址列表(大约400万个条目),并确定他们是否有相关的facebook帐户。我使用graph API搜索查询来检测这一点。现在有没有可能我会得到一个利率限制,或者甚至有任何官方利率限制吗?考虑到列表非常大,也许我们会做多线程请求,我担心任何速率限制。 我听说过非官方的600请求/ 600秒,但没有在facebook上看到任何证据。
我在写一个地牢风格的游戏,地牢基本上是一个网格窗格。我想让玩家每0.5秒移动一格,如果他保持控制键。但我不知道如何做到这一点。我读过JavaFX:如何检测钥匙是否被按下。但这个问题与我的问题并没有特别的关系(除了我可以追踪发生了多少关键事件,或许可以在此基础上做更多)。所以我跟随这篇文章并尝试使用线程。sleep()解决了我的问题,但事实证明玩家只是停了几秒钟,然后突然移动了几格。 有人知道怎么解
问题内容: 我有三个食物类型索引:“意大利”,“西班牙”,“美国”。当用户搜索“奶酪”时,“意大利”文档似乎出现在顶部。如果我偏爱说“西班牙语”,是否可以“增强”结果?(我仍然应该获得意大利语的结果,但是基于索引类型“ Spanish”的一些数值提升值,结果中返回的文档的顺序将优先使用“ Spanish”索引。在用户输入的lucene和/或ES查询? 问题答案: 添加带有字词查询或字段(或两者都有
我试图通过传递键从JpaRepository的getOne中按主键搜索 我有一个模型(客户),其中定义了客户的详细信息。我有一个接口服务(CustomerService)及其实现(CustomerServiceImpl,它实现CustomerService)。我还有一个接口存储库(CustomerRepository),它扩展了JpaRepository。现在在我的控制器中,我将id传递给函数(f
const UserSchema=new mongoose.schema({name:String,project_name:String}); const User=new mongoose.model(“User”,UserSchema); 我希望,如果一个项目名称是“机器学习和oops”,我在搜索框中搜索“oops”,我应该得到“机器学习和oops”显示
问题内容: 我有一个查询,用于查找按位置排序的结果。结果还必须考虑增值税,因此这也在查询中。不幸的是,该查询在未缓存时可能需要4秒钟以上的时间才能运行。谁能发现任何明显的问题或建议我做些什么来改善它? 只是为了澄清查询中正在发生的事情: 计算的距离是使用经/纬度的欧几里得距离 当包含增值税时,incvat字段用于显示价格 WHEN / THEN语句用于将价格0置于最底端 查询: 问题答案: 您可以