0

代码如下所示,我有一个按钮,一旦你点击它,每 4 秒激活一次定时器和定时器调用方法。但是,有时 4 秒不足以让服务器返回数据。但是,如果服务器在 1 秒内返回数据并且不利于用户等待更长时间,则增加计时器值也不是很好的解决方案。在这种情况下,我不知道什么是最佳/最佳解决方案。

-(IBAction)play:(id)sender{
    timer=[NSTimer scheculedWith TimerInterval(4.0) target:(self)selector:@selector(httpRequest) userinfo:nil repeats:YES]
    }
    -(void)httpRequest{

    _weak ASIHTTPRequest *request1 = [ASIHTTPRequest requestWithURL:url1];
    [request1 setCompletionBlock:^{
        NSString *responseString1 = [request1 responseString];
    //dispatch_async(backgroundProcess1,^(void){
        [self plotOverlay1:responseString1];
     //});
    }];
    [request1 setFailedBlock:^{
        NSError *error=[request1 error];
        NSLog(@"Error: %@", error.localizedDescription);
    }]; 

    [request1 startAsynchronous];
    }
4

1 回答 1

1

如果您只是希望数据不断更新,请考虑-httpRequest从第一个请求的完成块内再次调用(并删除计时器)。这样,您可以确保请求将再次执行,但仅第一个请求完成后 - 您可以在那里引入延迟,因此您会得到类似“第一次检查完成后两秒再检查一次”的信息。

这可能看起来像:

- (void)httpRequest {
    __weak ASIHTTPRequest *req = [ASIHTTPRequest requestWithURL:url1];
    [req setCompletionBlock:^{
        NSString *resp = [req responseString];
        [self plotOverlay1:resp];

        [self httpRequest];
        // or...
        [self performSelector:@selector(httpRequest) withObject:nil afterDelay:2.0];
    }];
    /* snip fail block */
    [req startAsynchronous];
}
于 2012-09-24T23:02:16.537 回答