具有重复一次行为的 UILocalNotification,如 Messages App

Posted

技术标签:

【中文标题】具有重复一次行为的 UILocalNotification,如 Messages App【英文标题】:UILocalNotification with repeat-once behaviour like in Messages App 【发布时间】:2015-05-05 10:34:14 【问题描述】:

我有简单的UILocalNotification:

UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.alertBody = @"Message";
notification.alertAction = @"Action";
notification.soundName = UILocalNotificationDefaultSoundName;
notification.category = kCategoryIdentifier;

[[UIApplication sharedApplication] presentLocalNotificationNow:notification];

是否可以重复通知一次,例如两分钟后?我想要准确的行为,比如在消息应用中。

我尝试设置通知对象的repeatInterval属性,但是:

每两分钟向用户显示一次通知,不会重复一次 系统向用户显示新通知,而不是重复旧通知。用户看到两条通知,一条带有 2 分钟后的时间戳

这不是我所期望的。

另外,由于第二个原因,我不想安排两个单独的通知。

编辑:在我的应用程序中,发生某事的时间非常重要。因此,在锁定屏幕中,当重复通知时,我希望用户知道这是较早发生的事情,而不是通知到达时发生的事情。因此重复通知应该具有第一次通知的时间戳。

【问题讨论】:

你想要在 2 分钟后重复本地通知 【参考方案1】:

是的,你可以设置repeatInterval。

参见文档here

重新安排通知的日历间隔。

SWIFT 声明 var repeatInterval: NSCalendarUnit OBJECTIVE-C@property(nonatomic) NSCalendarUnit repeatInterval

【讨论】:

如果我错了,请纠正我,但对于 NSCalendarUnitMinute 系统将每分钟重复一次通知,而不是一次。通知的时间戳也会向用户建议这是一个新通知,而不是之前发生的通知,并且由于某种原因会重复。 是的,但是您可以为每个通知的重复计数设置一个计数器,何时会提高,如果 activeNotification 的计数器> 1,则取消它。 谢谢,但时间戳问题对我来说真的很重要。在锁定屏幕中,当我重复通知时,我希望用户知道,这是发生在较早的事情,而不是通知到达时发生的时间。【参考方案2】:

试试这个代码

 localNotif.timeZone = [NSTimeZone systemTimeZone];
        localNotif.alertBody = @"Message";
        localNotif.alertAction = @"View";
        localNotif.soundName = UILocalNotificationDefaultSoundName;
        localNotif.applicationIconBadgeNumber=1;

        NSLog(@"LocalNotif.soundName %@",localNotif.soundName);
        for (int i=0; i<20; i++)
        
            localNotif.fireDate = [repeatAlarm dateByAddingTimeInterval:120*i];

            [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
        

【讨论】:

您创建了 20 个通知。他问如何重复一个以提高 2 次。

以上是关于具有重复一次行为的 UILocalNotification,如 Messages App的主要内容,如果未能解决你的问题,请参考以下文章

MS-Access 按具有 count(*) > 1 奇怪行为的列分组?

004-行为型-02-模板方法模式(Template Method)

fieldoffset 的未定义行为[重复]

UNION 语句相同的选定值 - 奇怪的行为 [重复]

没有 OpenGL 的重复 OpenGL 正交投影行为

删除固定宽度文件中的重复项,该文件除最后一次出现外具有多个键列