根据AppleUILocationNotification.fireDate
文档:
如果指定的值为 nil 或者是过去的日期,则立即发送通知。
使用过去的日期时,我没有看到这种行为。是只有我,还是其他人也看到了?
这是我的代码:
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 的官方(引用/链接)说这是预期的行为,或者按照文档所说的那样工作的上述代码的不同版本。
这对我的应用程序很重要,因为在某些情况下我需要通知用户警报,即使它发生在当天早些时候。我想我可以修改我的代码来检查当前时间并总是给出一个超出几秒的值——但我不确定“超出多少秒”是否真的安全,我希望它尽快发生——如果有更好的方法来获得“记录在案的行为”,也宁愿没有那个黑客。我的真实代码与上面类似,但我发布了几个通知,有些可能是过去的,有些可能是今天晚些时候,有些是明天及以后(这是用于日历应用程序)。