目标C中的时限方法

时间:2016-01-09 15:59:45

标签: objective-c uitableview nstimer afhttprequestoperation

我有一个网络方法,它从服务器请求数据,然后在表视图上显示它。但问题是,当服务器没有响应或下载时间过长时,我希望能够仅使用已获取的数据重新加载表视图。我尝试使用performSelector:withObject:afterDelay:方法,但即使下载完成,此方法也会执行选择器。我尝试创建一个bool值来确定在调用选择器时是否已经完成下载但如果下载已经完成则会创建重叠,然后用户执行另一个网络操作,选择器尚未被调用但仍在创建由于这种重叠而导致的错误行为。我想要一个时间限制的方法,但如果下载已经完成,可以取消。实现这个的最佳方法是什么?或者有最好的方法来做我想要的吗?

2 个答案:

答案 0 :(得分:2)

下载完成后,可以取消performSelector:withObject:afterDelay:来电。例如,下载完成后,您可以调用

[NSObject cancelPreviousPerformRequestsWithTarget:selector:object:]

此处,target是您调用performSelector:withObject:afterDelay:的对象,selector是您传递的选择,object是您传递的对象(或nil )。

或者,如果您只有一个一次运行的performSelector,则可以使用更简单的方法:

[NSObject cancelPreviousPerformRequestsWithTarget:yourObject];

yourObject在这种情况下可能会self

答案 1 :(得分:-1)

听起来你正在寻找NSTimer。您可以在网络活动开始时启动截止时间计时器,如果工作在计时器触发之前完成,则会使计时器失效。