我正在我的一个ViewController中创建一个本地通知。
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
为了我的测试目的,我在30秒后设定了它的预定时间。
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:30];
我为该本地通知添加了一些属性
localNotification.alertBody = @"Alert message";
localNotification.timeZone = [NSTimeZone defaultTimeZone];
localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1;
localNotification.soundName = UILocalNotificationDefaultSoundName;
毕竟我安排了通知。
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
正如我计划在30秒内发出通知。
现在我需要的是,一分钟后再重复一次通知。这就像预定义的贪睡时间。
如果我添加 repeatInterval 属性,如下所示,则会每隔一分钟触发一次。
localNotification.repeatInterval = NSCalendarUnitMinute;
有没有办法实现我的目标?
总结一下,我需要的是在 fireDate 值中触发本地通知,并且只有另一个预定义的暂停时间,即使后台和手机中的应用程序也被锁定。
注意:请不要建议为此创建另一个本地通知。
答案 0 :(得分:1)
您可以在通知中设置userInfo
,
NSMutableDictionary *payload = [NSMutableDictionary dictionary];
payload[@"repeat"] = [NSNumber numberWithBool:YES];
payload[@"interval"] = @(1.0);
设置通知后,向其添加用户信息
....
localNotification.alertBody = @"Alert message";
localNotification.timeZone = [NSTimeZone defaultTimeZone];
....
localNotification.userInfo = payload;
并在didReceiveLocalNotification
委托方法
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
NSDictionary *dict = [notification userInfo];
BOOL repeat = [dict[@"repeat"] boolValue];
if (repeat) {
//update firedate and schedule notification
}
}
答案 1 :(得分:1)
设置localNotification.repeatInterval = 0;
答案 2 :(得分:0)
@ Akhilrajtr的解决方案几乎是正确的。
您可以更新通知的用户信息并在didReceiveLocalNotification
中处理。除此之外,您还需要注册通知设置。
<强> AppDelegate.m 强>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationActivationModeBackground | UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
[application registerUserNotificationSettings:settings];
return YES;
}
注意:{10}在iOS 10中已弃用。使用 而是UNNotificationSettings。
<强>解决方案:强>
1.将userInfo添加到通知对象
UIUserNotificationSettings
2.在localNotification.userInfo = @{@"repeat" : @(YES), @"interval" : @(1.f)};
答案 3 :(得分:-2)
你应该在第一个notification
一分钟后调用一个方法,这只会触发另一个notification
一次。
[NSTimer scheduledTimerWithTimeInterval:60.0
target:self
selector:@selector(targetMethod:)
userInfo:nil
repeats:NO];