注释 localNotification.alertBody 时未调用 DidReceivedLocalNotificaiton
Posted
技术标签:
【中文标题】注释 localNotification.alertBody 时未调用 DidReceivedLocalNotificaiton【英文标题】:DidReceivedLocalNotificaiton not called when localNotification.alertBody is commented 【发布时间】:2011-12-19 07:39:55 【问题描述】:我有以下代码行,每 1 分钟生成一次本地通知(用于测试),它在以下条件下完美运行。
-
当应用程序处于运行状态时。
当应用程序处于后台状态并且 localNotification.alertBody = @"Local Notification Received" 未注释时。
现在,当我评论“localNotification.alertBody”时,它在应用程序处于运行状态时工作正常,但在应用程序处于后台状态时不起作用。
以下是创建本地通知的代码行。
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
[localNotification setRepeatInterval:NSMinuteCalendarUnit];
localNotification.timeZone = [NSTimeZone defaultTimeZone];
localNotification.repeatCalendar = [NSCalendar currentCalendar];
localNotification.fireDate = fireDateOfNotification;
//localNotification.alertBody = @"Local Notification Received";
localNotification.repeatInterval = NSMinuteCalendarUnit;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
[localNotification release];
在 - (void)applicationDidEnterBackground:(UIApplication *)application
bgTask = [application beginBackgroundTaskWithExpirationHandler: ^
dispatch_async(dispatch_get_main_queue(), ^
[application endBackgroundTask:self->bgTask];
self->bgTask = UIBackgroundTaskInvalid;
【问题讨论】:
【参考方案1】:您似乎正试图在后台执行代码,而没有向用户显示通知。
根据定义,如果 alertBody 为 nil,UILocalNotification 将不会显示弹出窗口,即使在应用程序正在运行的情况下会调用 didReceiveLocalNotification。
如果应用程序在后台并且 alertBody 为空,则不会弹出警报,也不会执行任何代码。
【讨论】:
【参考方案2】:来自API documentation:
alertBody
...
分配一个字符串,或者最好是一个本地化字符串键(使用 NSLocalizedString)作为消息的值。如果此属性的值不为零,则会显示警报。默认值为 nil(no alert)。
你确定application:didReceiveLocalNotification:
根本没有被调用吗?还是只是您缺少警报?
【讨论】:
好吧,我想要做的是,如果应用程序处于后台状态,那么我不想显示任何消息并让 didReceiveLocalNotification 被调用......事实上我不想显示任何alret 消息并在间隔后调用 didReceiveLocalNotification。 这应该通过您的代码来实现。你确定,application:didReceiveLocalNotification:
没有被调用吗?您是否在该方法中添加了一些日志记录?
请使用代码更新您的问题,而不是将其放入评论中以获得更好的可读性。以上是关于注释 localNotification.alertBody 时未调用 DidReceivedLocalNotificaiton的主要内容,如果未能解决你的问题,请参考以下文章