合并或以其他方式消防方法"每隔一段时间"?

时间:2015-01-28 01:31:00

标签: ios

向我的应用程序提供数据的服务器最近添加了一项功能,允许您执行基本日志记录,例如"用户选择的徽标"或"用户正在退出"。

我唯一想要使用它的地方是在一个带有几个滑块的页面中,这些滑块可以对输入值进行计算。这是连续的,它会在您移动滑块时重新计算输出。

这使我无法在 时调用此日志记录方法。我不想每次数字改变时都打电话给我,否则我会谋杀服务器。我现在可以用"计算"按钮,但这会杀死我喜欢的整个无模式UI。

有没有一种方法可以合并呼叫,所以在5秒内进行的所有呼叫只会导致对工作方法的一次调用?如果用户执行其他操作,例如导航或退出应用程序,我还必须强制触发该方法。

2 个答案:

答案 0 :(得分:3)

您可以轻松地将NSTimer添加到滑块的IBAction方法中。每次调用该方法时,都会使计时器失效并再次启动它。将分析调用放入计时器的操作方法中,只有在计时器实际完成时才会调用该方法。

例如:

@interface ViewController ()

@property (nonatomic) NSTimer *actionTimer;

@end

@implementation ViewController

- (IBAction)sliderChanged:(UISlider *)sender 
{
    [self.actionTimer invalidate];
    NSLog(@"Slider value: %f", sender.value);
    self.actionTimer = [NSTimer scheduledTimerWithTimeInterval:2
                                                        target:self
                                                      selector:@selector(timerCompleted) 
                                                      userInfo:nil
                                                       repeats:NO];
}

- (void)timerCompleted
{
    NSLog(@"Timer completed.");
}

@end

答案 1 :(得分:0)

当输出值稳定时,观察计算值的后台线程如何通过在后台线程上调度块来触发更新,如

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(showValue:)
                                             name:@"showValue"
                                           object:nil];

您还可以在viewWillDisappear中安排阻止视图和(我认为)退出事件。