如何安排在iOS中只重复一次的LocalNotification

时间:2017-08-14 04:25:55

标签: ios objective-c uilocalnotification

我正在我的一个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 值中触发本地通知,并且只有另一个预定义的暂停时间,即使后台和手机中的应用程序也被锁定。

注意:请不要建议为此创建另一个本地通知。

4 个答案:

答案 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];