Calling a Method at NSDate

女生的网名这么多〃 提交于 2019-12-01 09:48:46

问题


I'm trying to call a method at a certain time and date (using an NSDate) but I can't work out how to do it.

I don't want to use NSTimer because that becomes paused when the app goes into the background or is closed. I don't want to run one in the background either because this only solves half of the problem and is a wasteful way of doing it in my opinion. I thought that if I could fire a method at an NSDate in the future, when the app is opened again I can see if the current date has passed the fire date and so whether to call it instantly or carry on waiting.

I suppose I'm looking for something like UILocalNotification, without the notification.

I am hoping that there is a simple way of doing this that I just can't seem to find, so any help would be greatly appreciated.


回答1:


At first, it sounded to me like you want the performSelector:withObject:afterDelay: method. So you have an NSDate *date when you want to call the selector.

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

Of course, this won't live past your runtime, so you've pretty much outlined what you need to do already. You just save your date somewhere (there are MANY ways to do that), and then check against it in applicationDidBecomeActive. You can use the same timeIntervalSinceNow method I used above. (If the date has past, the the interval would be negative.)

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



回答2:


Why don't you just use the NSTimer, and in the...

- (void)applicationDidBecomeActive:(UIApplication *)application

callback, check the time and date, and update the timer, or call the function if the date has passed.



来源:https://stackoverflow.com/questions/5495340/calling-a-method-at-nsdate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!