• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - UILocationNotfication.fireDate 过去 - 错误?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 17:10:02 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

根据Apple docs关于UILocationNotification.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"sID"];
alarm.userInfo = userInfo;
notifications = [NSArray arrayWithObject:alarm];
UIApplication *app = [UIApplication sharedApplication];
app.scheduledLocalNotifications = notifications;

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

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

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



Best Answer-推荐答案


@eselk,

我看到了和你一样的行为:一个新创建的 UILocalNotification 过去有一个 fireDate 不会触发 如果它已安装通过在 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap