【问题标题】:Delaying, cancelling or replacing a ASIFormDataRequest in a NSOperationQueue (for a searchbox)延迟、取消或替换 NSOperationQueue 中的 ASIFormDataRequest(用于搜索框)
【发布时间】:2011-04-21 13:03:26
【问题描述】:

我正在使用以下代码成功创建 ASIFormDataRequest。

    //get groups
    if (![self queue]) {
        [self setQueue:[[[NSOperationQueue alloc] init] autorelease]];
    }

    //make the url by appending the URL from the Constant class to the jsp name 
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", URL, @"connectors/searchGroupsServlet.jsp"]];

    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request addRequestHeader:@"User-Agent" value:USER_AGENT];
    [request addPostValue:[login username] forKey:@"username"];
    [request addPostValue:[login password] forKey:@"password"];
    [request addPostValue:[searchText lowercaseString] forKey:@"query"];
    [request addPostValue:GROUP_FILTER_LIMIT forKey:@"limit"];
    [request setDelegate:self];
    [request setDidFinishSelector:@selector(requestDone:)];
    [request setDidFailSelector:@selector(requestWentWrong:)];

目前,用户在搜索框中的每一次按键都会发出此请求(输入的文本在请求中作为搜索字符串发送)。但是,我不想在每次按键时都发送请求,而是希望将请求延迟一秒,以允许用户在发送请求之前在搜索框中输入更多字符。

我已经成功创建了一个线程,在用户继续输入时会等待一秒钟(尽管我承认我不相信这是目前最好的方法,但它现在有效)...

这个

[self performSelectorInBackground:@selector(wait:) withObject:request];

调用这个

-(void)wait:(NSString *)request
{
    [NSThread sleepForTimeInterval:1.00];
    [[self queue] addOperation:request]; //queue is an NSOperationQueue
}

但是,如果用户继续键入,我还没有弄清楚如何取消请求或不将请求放入队列,或者清空队列并用新请求替换它。

最后,显然我可以强制用户等到他们按下弹出式键盘上的“搜索”按钮,但我希​​望在没有那个的情况下提供搜索结果。

谢谢

【问题讨论】:

  • 等一下……我没有完全考虑清楚吗?也许我只是重新编写代码,所以在输入停止之前根本不会发出任何请求。嗯......所以我真正需要的是一个等待一秒钟的线程,但每次再次按下按键时都会自行重置!
  • 我仍在为此苦苦挣扎,尽管我现在正在考虑使用 NSTimer。有什么建议吗?

标签: iphone cocoa-touch asihttprequest nsthread nsoperationqueue


【解决方案1】:

答案是创建一个 NSTimer,并在每次按下新键时使其无效。然后重新开始。

[timer invalidate];

【讨论】:

    【解决方案2】:

    你可以试试这个取消

    + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument
    

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多