gpt4 book ai didi

ios - 过去的 UILocationNotfication.fireDate - 错误?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:13:15 27 4
gpt4 key购买 nike

根据 Apple docsUILocationNotification.fireDate 上:

If the specified value is nil or is a date in the past, the notification is delivered immediately.

我在使用过去的日期时没有看到这种行为。只有我看到了,还是其他人也看到了?

这是我的代码:

NSMutableArray *notifications = [NSMutableArray array];
UILocalNotification* alarm = [[UILocalNotification alloc] init];
alarm.fireDate = [NSDate dateWithTimeIntervalSince1970:time(NULL)-5];
alarm.repeatInterval = 0;
alarm.soundName = @"alarm.caf";
alarm.alertBody = @"Test";
alarm.alertAction = @"Launch";
NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init];
[userInfo setValue:[NSNumber numberWithInt:10] forKey:@"PsID"];
alarm.userInfo = userInfo;
notifications = [NSArray arrayWithObject:alarm];
UIApplication *app = [UIApplication sharedApplication];
app.scheduledLocalNotifications = notifications;

如果我将 time(NULL)-5 更改为 time(NULL)+5,我将在这段代码运行 5 秒后收到通知。使用 -5 值,我永远不会收到通知。

我知道这里的好问题需要有一个可能的明确答案,这可能会受到很多“我也是”答案的影响——所以我要找的是官方的(引述/链接)来自Apple 表示这是预期的行为,或者上述代码的不同版本可以按照文档所说的那样工作。

这对我的应用程序很重要,因为在某些情况下,即使警报发生在当天早些时候,我也需要通知用户警报。我想我可以修改我的代码来检查当前时间,并始终给出超出该时间几秒的值——但我不确定“超过多少秒”是否真的安全,我希望它尽快发生——如果有更好的方法来获得“记录在案的行为”,也宁愿没有那个黑客。我的实际代码与上面类似,但我发布了几个通知,有些可能是过去的,有些是今天晚些时候的,有些是明天以后的(这是用于日历应用程序)。

最佳答案

@eselk,

我看到了与您相同的行为:过去具有 fireDate 的新创建的 UILocalNotification 如果已安装则不会触发 通过在 UIApplication 对象上设置 scheduledLocalNotifications 属性

但是,如果使用 UIApplication 的 scheduleLocalNotification 方法安装相同的 UILocalNotification 对象,它立即触发。

在我看来这是一个基于 the documentation for scheduledLocalNotifications 的错误,其中非常清楚地指出:

...When you set [the scheduledLocalNotifications] property, UILocalNotification replaces all existing notifications by calling cancelLocalNotification: and then calling scheduleLocalNotification: for each new notification.

鉴于情况似乎并非如此,如果您的应用程序逻辑需要向用户显示过去安排的通知,则解决方法是调用 scheduleLocalNotification。

UILocalNotification *ln = [[UILocalNotification alloc]init];
[ln setFireDate:[NSDate dateWithTimeIntervalSinceNow:-2]]; // two seconds ago
// ...

// the following line works as expected - the notification fires immediately
[application scheduleLocalNotification:ln]; // Using this line works as expected

// using the following does NOT work as expected - the notification does not fire
//application.scheduledLocalNotifications = [NSArray arrayWithObject:ln];

(我在 iOS 6 模拟器上测试过)

关于ios - 过去的 UILocationNotfication.fireDate - 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12980584/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com