- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
根据 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:@"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/
我收到以下通知,该通知设置为在当天晚上 9 点(如果当前在晚上 9 点之前)或第二天晚上 9 点(如果已经超过晚上 9 点)触发。 一切看起来都不错,但无论当前时间如何,它总是立即显示通知。 let
我知道如何使用 UILocalNotification。 My Question is NOT related to custom repeatInterval, i know unfortunate
我想为一个在下午 6:00 开始的程序设置本地通知。为此,我在日期变量中获取了时间,并将其与系统中的当前日期进行比较。 假设 setDate 是固定日期,即下午 6 点,所以我必须设置 firedat
我正在使用 Swift 开发 iOS 应用程序。 抱歉,我的英语非常非常糟糕。 我想在设备被锁定或应用程序处于后台时对 UILocalNotification 的 fireDate 进行任何处理。 我
请给我我正在等待的解决方案我制作了一个闹钟应用程序,我在本地通知 fireDate 上设置的闹钟时间正常工作,然后我尝试第二次(1 分钟后的贪睡时间)我无法设置本地通知,当我尝试设置第二次时时间本地通
我正在使用这个应用程序 here它适用于我,但我想手动插入本地通知的 fireDate,而不是使用 datePicker。 notif.fireDate = [datePicker date]; 如何
为什么按下按钮后不显示通知? 如果 fireDate 是 NSDate(timeIntervalSinceNow: 10) 它会工作正常 如何从数组中获取通知? @IBAction func
有什么方法可以将同时触发的两个(或更多)UILocalNotifications 合并在一起。假设我有两个提醒在今天中午 12 点触发: 1) 洗碗2)买牛奶 我现在拥有的是(因为我已经安排了两个单独
根据 Apple docs在 UILocationNotification.fireDate 上: If the specified value is nil or is a date in the
我正在尝试为我的本地通知设置一个有条件的触发时间,但是当我尝试这两种方法时它并没有失败,但它仍然没有用。所以,我想知道我是否能够做这样的事情? 注意:startTime 和 endTime 是来自日期
我有下面的代码,它根据存储在 NSDefault 变量 checkOutTime 中的值初始化一个 NSTimer。 假设我将此变量中的时间更改为过去的时间(当前时间之前)并重新初始化计时器,它会自动
我正在尝试学习 Xcode 和 swift,但我无法让我的通知适用于我正在制作的简单闹钟。我使用了日期选择器并为此设置了 notification.firedate =。通知出现在通知窗口上,但警报窗
我正在使用 NSTimer,在某些情况下,我想将方法 NSTimer 调用被调用之前的时间加倍。 基本上:如果我将它设置为每 0.5 秒调用一次,我想偶尔延迟它以便它在下次调用之前等待 1.0 秒
如果我创建一个UILocalNotification并将其fireDate设置为过去并使用repeatInterval,那么将来下次repeatInterval到期时它会触发吗?或者 UILocalN
我在我的应用程序中安排了一批通知,一些具有重复间隔,另一些只是在特定日期触发一次。我正在使用此方法设置我的通知以创建通知: func notification(date: Date, repeatUn
我的任务是创建一个闹钟应用程序。我设法使用本地通知发出警报声。 问题是我无法在“暂停”和“确定”的本地通知上制作按钮(操作)。我还搜索了如何实现交互式本地通知,但我无法理解。我现在想的是创建一个带有按
有谁知道“PushNotificationIOS”方法“scheduleLocalNotification”的“fireDate”对象的日期和时间格式 提前致谢 最佳答案 我在向 fireDate 发
我正在尝试使用 NSTimer 来调用方法,但它不起作用。我需要此方法在用户在日历上设置的特定日期和时间运行一次。 我的 viewDidLoad 方法中有这段代码: NSDateComponents
下面的代码适用于通知。但是,当我尝试该应用程序时,远近之间的通知太多了。 extension AppDelegate: CLLocationManagerDelegate { func sendLoc
我是一名优秀的程序员,十分优秀!