应用程序在后台时不显示iOS UILocalNotification

时间:2011-06-11 02:13:24

标签: objective-c ios cocoa-touch uikit uilocalnotification

已修复 - 好的,发现它是什么,当我没想到它时,有一个错误的[[UIApplication sharedApplication] cancelAllLocalNotifications];被解雇了。

那是你的问题。

感谢大家的帮助,很抱歉让它变得愚蠢的编码器综合症。

我已经建立了我的本地通知:

- (void)scheduleNotification {
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
    Class cls = NSClassFromString(@"UILocalNotification");
    if (cls != nil) {
        UILocalNotification *notif = [[cls alloc] init];
        NSLog(@"%@", [NSDate date]);
        notif.fireDate = [NSDate dateWithTimeIntervalSinceNow:10];

        notif.alertBody = NSLocalizedString(@"Hello.", nil);

        [[UIApplication sharedApplication] scheduleLocalNotification:notif];
        NSLog(@"Notification scheduled at %@", notif.fireDate);
        [notif release];
    }
}

正如预期的那样,我的调试日志将来会输出正确的fireDate 10秒。如果我不离开我的应用程序,我会得到一个成功的application:didReceiveLocalNotification:回调。

这里的打嗝是,如果我按下按钮来安排此通知并点击主页按钮将其置于后台。如果我这样做,通知永远不会触发,我从未从操作系统获得警报视图。

我错过了一些明显的东西吗?我在这里上下打量,苹果文档,觉得我错过了一些明显的东西。

非常感谢任何帮助。感谢。

3 个答案:

答案 0 :(得分:1)

请参阅Apple的文档中的示例: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

可能是因为没有将timeZone设置为[NSTimeZone defaultTimeZone]会导致问题吗?如果未设置timeZone(默认为零),则假定为GMT。

答案 1 :(得分:0)

您是否尝试将代码包装在后台任务中?

答案 2 :(得分:0)

好的,发现它是什么,有一个错误的[[UIApplication sharedApplication] cancelAllLocalNotifications];在进入后台时被发送。