我有一种网络方法,它从服务器请求数据,然后将其显示在表格视图上。但问题是当服务器没有响应或下载时间太长时,我希望能够使用已经获取的数据重新加载表视图。我尝试使用performSelector:withObject:afterDelay:
方法,但即使下载完成,此方法也会执行选择器。我尝试创建一个布尔值来确定调用选择器时下载是否已经完成,但这会产生重叠如果下载已经完成,然后用户执行了另一个未调用选择器的网络操作,但由于此重叠而创建了错误操作。我想要一种有时间限制的方法,但如果下载已经完成,可以取消。实现这一点的最佳方法是什么?还是有最好的方法来做我想做的事?
2 回答
2
performSelector:withObject:afterDelay:
下载完成后可以取消您的通话。例如,当下载完成时,您可以调用
[NSObject cancelPreviousPerformRequestsWithTarget:selector:object:]
这里,target
是你调用的对象performSelector:withObject:afterDelay:
,selector
是你传递的选择器,object
是你传递的对象(或nil
)。
或者,如果您一次只运行一个 performSelector,则可以使用一种更简单的方法:
[NSObject cancelPreviousPerformRequestsWithTarget:yourObject];
yourObject
可能会self
在这种情况下。
于 2016-01-09T16:34:46.197 回答
-1
听起来您正在寻找NSTimer
. 您可以在网络活动开始时启动截止时间计时器,如果工作在计时器触发之前完成,则使计时器无效。
于 2016-01-09T16:25:51.410 回答