我的Mac应用程序会在特定时间更新它的徽章编号 这是我的功能:
- (void)setBadgeNumber
{
// Sets the badge number to 1.
[[[NSApplication sharedApplication] dockTile] setBadgeLabel:@"1"];
// Sends a notification.
NSUserNotificationCenter *nc = [NSUserNotificationCenter defaultUserNotificationCenter];
NSUserNotification *notification = [[NSUserNotification alloc] init];
notification.title = @"Update";
notification.informativeText = @"There's something new in the app!";
[nc deliverNotification:notification];
}
我想知道你是否可以在某个特定日期执行此功能(例如:08-08-2015) 即使应用程序没有运行(也就是应用程序正在运行) 有人知道你是否可以在某个日期(和时间)执行某个方法吗?
答案 0 :(得分:1)
根据您所追求的目标,您有很多选择。
明显的起点是NSTimer。
还有performSelector withDelay函数系列。
最后,我有时会使用一个很酷的扩展,延迟阻止。
哦,还有一个 - 您还可以设置本地通知。
我更喜欢NSTimer' ID_ commands 0x8000 through 0xDFFF
<强>更新强>
<强>的NSTimer:强>
initWithFireDate:interval:target:selector:userInfo:repeats:
<强> dispatch_after 强>
NSTimer *saveProgressSizeTimer = [[NSTimer alloc]
initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:2.0f]
interval:1.0f
target:self
selector:@selector(myMethod:)
userInfo:myUserInfo
repeats:YES]; // This Will Be Executed After 2 Seconds
答案 1 :(得分:1)
Launchd通常与Launch Agents和Launch Daemons相关联,但Apple也建议将其作为Unix cron功能的替代品。
使用此功能,您可create a launchd property list以schedule jobs to run periodically或指定的日历间隔。
如果您需要程序运行代码,请使用在应用程序调用时调用相应函数的参数,然后退出。然后,使用launchd通过配置属性列表并将其添加到正确的文件夹(例如 / Library / LaunchAgents )
,在指定的日期和时间使用该参数调用您的程序。答案 2 :(得分:1)
声明一个NSTimer属性并调用您的方法来检查是否相同。
self.nstimer= [NSTimer scheduledTimerWithTimeInterval:0.10 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];
这将是您的更新方法:
- (int)updateTime:(NSTimer *)timer
{
NSString *Time1 = @"2016-02-20 03:19:05 +0000";
NSString *Time2 = @"2016-02-20 03:19:05 +0000";
NSDateFormatter *dateFormatter=[NSDateFormatter new];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss Z"];
NSDate *tokonExpireDate1=[dateFormatter dateFromString:Time1];
NSDate *tokonExpireDate2=[dateFormatter dateFromString:Time2];
if ([tokonExpireDate1 compare:tokonExpireDate2] == NSOrderedDescending) {
//"date1 is later than date2
NSLog(@"Later Date");
} else if ([tokonExpireDate1 compare:tokonExpireDate2] == NSOrderedAscending) {
//date1 is earlier than date2
NSLog(@"Previous Date");
} else {
//dates are the same
NSLog(@"Same Date");
//CALL your method here.
}
}
我把这个方法调用了0.10秒。如果您需要按天间隔(2天,3天后等)拨打电话,请将您的日期转换为秒,然后致电。希望你知道这一点。它会工作。谢谢。
答案 3 :(得分:0)
要在特定时间执行方法,请查看NSTimer。但是,当应用程序当前未运行时,我不知道如何执行应用程序的方法。据我所知,只有退出方式在特定时间(使用给定参数)启动应用程序或使用背景资料,例如NSDockTilePlugin。