【问题标题】:UILocalNotification isn't working at allUILocalNotification 根本不起作用
【发布时间】:2011-06-25 20:40:19
【问题描述】:

UILocalNotification 遇到了一些非常恼人的问题。

在完成一个我几乎完成的应用程序时,我注意到我无法让本地通知工作,无论我尝试什么。

因此,与其浪费时间,我决定回归基础,看看能否让它们发挥作用。

我创建了一个新的基于 XCode 视图的应用程序,并将 -viewDidLoad 替换为:

- (void)viewDidLoad
{
    UILocalNotification * theNotification = [[UILocalNotification alloc] init];
    theNotification.alertBody = @"Alert text";
    theNotification.alertAction = @"Ok";
    theNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10];

    [[UIApplication sharedApplication] scheduleLocalNotification:theNotification];
}

但是,这也没有任何作用。
我希望在启动应用程序 10 秒后看到通知,但没有出现。
另外,我在我的 iPhone 和模拟器上都对此进行了测试。

我在这里错过了一些非常重要的东西吗? (我已经搜索了 Apple 文档,但找不到任何关于为什么会发生这种情况的信息

谢谢

【问题讨论】:

    标签: ios objective-c xcode uilocalnotification


    【解决方案1】:

    UILocalNotifications 仅在应用运行(或在后台运行)时自动显示。如果应用程序正在运行并且触发了本地通知,则UIApplicationDelegate- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 方法被调用并且系统不显示任何内容(也不播放声音)。如果要显示通知,请在委托方法中自己创建一个UIAlertView

    【讨论】:

    • 我想没有办法改变这种行为?通知中心是向我的用户显示应用程序运行时发生的异步通信事件信息的好方法。
    • 只是关于另一个需要注意的问题的注释...如果您设置时区参数,它会在闹钟按预期响起时生效...但是,如果您将其明确设置为 UTC 以避免时区它可能不会像你期望的那样做,因为它仍然会修改从 UTC 到 UTC 传递的 firedate,但以某种方式有所不同。我发现在设置 UTC 时区参数时从未触发警报,因此将其设置回 nil 并确保触发的 UTC 时间正确解决了问题。
    【解决方案2】:

    只是我个人愚蠢冒险的评论......

    我遇到了同样的问题,但我的问题是我忘记为 alertBody 赋值。如果不设置alertBody,则不会显示通知。

    【讨论】:

    • 我一直在寻找这个“错误”很长时间!谢谢!我至少会收到警告,因为安排一个空的不可显示的通知肯定是错误的。
    • 恢复幸福 :)
    • 天啊,@conarch,你拯救了我的一天 :) 我也是这样的人 :) 感谢您指出这一点。
    • 嗯!文档中没有提到这一点,但它似乎是真的
    • 哇,我已经为此奋斗了好几个小时。你是真正的 MVP :)
    【解决方案3】:
    1. fireDate 必须是未来时间。
    2. 应用必须在后台运行,或者已关闭。
    3. 还有一件事,不要忘记显示查询是否允许推送,将以下代码添加到 AppDelegate:

      -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
        if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
             UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil]; 
             [application registerUserNotificationSettings:settings]; 
        }
      }
      

    【讨论】:

    • 没有在Apple Documentation 的什么地方,我读到我首先需要为只有本地通知的应用程序注册UserNotificationSettings。这对我有帮助,就像听起来一样简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    相关资源
    最近更新 更多