2011-03-31 31 views
1

我想在特定的时间和日期调用方法(使用NSDate),但我不知道如何去做。在NSDate调用方法

我不想使用NSTimer,因为当应用程序进入后台或关闭时,它会暂停。我不想在后台运行一个,因为这只能解决一半的问题,而且在我看来这是一种浪费的方式。我认为,如果将来我可以在NSDate处开启一个方法,那么当应用程序再次打开时,我可以看到当前日期是否已经过了开火日期,以及是立即调用它还是继续等待。

我想我正在寻找类似UILocalNotification的东西,没有通知。

我希望有一个简单的方法做到这一点,我似乎无法找到,所以任何帮助将不胜感激。

回答

1

起初,它听起来像你想要的performSelector:withObject:afterDelay:方法。所以当你想调用选择器时你有一个NSDate *date

NSTimeInterval delay = [date timeIntervalSinceNow]; 
[self performSelector:@selector(methodToFire) withObject:nil afterDelay:delay]; 

当然,这不会超过你的运行时间,所以你几乎已经概述了你需要做什么。你只需要在某处保存你的日期(有很多方法可以做到这一点),然后在applicationDidBecomeActive中检查它。您可以使用上面使用的相同timeIntervalSinceNow方法。 (如果日期已经过去,该区间将是负面的。)

if ([date timeIntervalSinceNow] <= 0) { 
    // do something... 
} 
+0

是的,我认为这是我将要使用的。有点希望会有一个'performSelector:withObject:atDate:',但我认为我希望有一些不在那里的东西。 :-)任何理由使用'[self performSelector:@selector(methodToFire)withObject:nil afterDelay:delay];'over'NSTimer'? – Baza207 2011-03-31 07:07:49

+0

不是我能想到的,计时器是更多的代码,我认为,但提供了更多的灵活性(您可能不需要)。 – livingtech 2011-04-02 02:53:56

1

你为什么不只是使用的NSTimer,并在...

- (void)applicationDidBecomeActive:(UIApplication *)application 

回调,检查时间和日期,以及更新计时器,或者调用函数,如果日期已过。

+0

我想尝试一个远离形式的计时器尽可能保持性能到最大。任何使用'NSTimer'超过'[self performSelector:@selector(methodToFire)withObject:nil afterDelay:delay];'' – Baza207 2011-03-31 07:12:00

+1

@ Baza207这样你就可以继续更新你的UI,而不必处理线程。 (另外一个NSTimer的慢火率是非常高效的,请确保你的配置文件过早优化之前)。 – 2011-03-31 07:57:56

+0

Ah Oki。这有助于我的决定。非常感谢你的帮助。 :-D – Baza207 2011-03-31 10:46:39