如何在服务器返回iOS之前进行响应

如何在服务器返回iOS之前进行响应,ios,Ios,我的情况是这样的: 当您按下一个按钮时,它将首先隐藏该按钮,然后向服务器发送一个http请求,该请求被发送到一个php脚本并执行一个“exe”以使用打印机打印内容 但是当我测试应用程序时,我发现当服务器上的“exe”退出时按钮隐藏了,结果是当我按下按钮时,应用程序就像“notresponse”按钮一样 不隐藏并保持“按下”状态,不友好。有什么想法吗 帮我解决这个问题 最后,我使用了slef performSelectorInBackground,因为我不关心php返回的结果,它工作得很好,比异

我的情况是这样的:

当您按下一个按钮时,它将首先隐藏该按钮,然后向服务器发送一个http请求,该请求被发送到一个php脚本并执行一个“exe”以使用打印机打印内容

但是当我测试应用程序时,我发现当服务器上的“exe”退出时按钮隐藏了,结果是当我按下按钮时,应用程序就像“notresponse”按钮一样 不隐藏并保持“按下”状态,不友好。有什么想法吗 帮我解决这个问题



最后,我使用了slef performSelectorInBackground,因为我不关心php返回的结果,它工作得很好,比异步调用更简单。

接口更新只在方法完成后进行。尝试使用PerformSelect以额外的方法运行php部件:

- (void)yourCurrentMethod {
    button.hidden = YES;
    [self performSelector:@selector(doSomething)];
}

- (void)doSomething {
    /* call php script, etc */
}

可能是您正在对服务器进行同步调用。查看此处以了解如何进行异步调用


对不起,我的意思是performSelector:withObject:afterDelay:

- (void)yourCurrentMethod {
    button.hidden = YES;
    [self performSelector:@selector(doSomething) withObject:nil afterDelay:0.1];
}

- (void)doSomething {
    /* call php script, etc */
}

这将处理UI中隐藏的请求,然后调用doSomething方法,而不使其成为后台线程,因此您可以使用同步请求。如果您只想调用php而不关心结果,那么使用异步请求需要做更多的工作(但更干净),而这并不是您真正需要的

-performSelector是否异步?[self doSomething]和[self-performSelector:@selector(doSomething)]之间有什么区别?前者是同步的,后者是异步的?如果您想让它在后台运行,我建议您使用[self-performSelectorInBackground:@selector(doSomething)]。我最终使用了[performSelectorInBackground],它工作得很好,谢谢您最好将您的解决方案作为答案发布,而不是编辑您的问题;请注意,您甚至可以选择自己的答案作为已接受的答案,因此此问题可以关闭。。。