注释localNotification.alertBody时未调用DidReceivedLocalNotificaiton

时间:2011-12-19 07:39:55

标签: iphone objective-c ios4 uilocalnotification

我有以下代码行每1分钟后生成一次本地通知(For Testing),它在以下条件下完美运行。

  1. 当应用程序处于运行状态时。
  2. 当应用程序处于后台状态且localNotification.alertBody = @“收到本地通知”时未注释。
  3. 现在当我评论“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];
    

    in - (void)applicationDidEnterBackground:(UIApplication *)application

        bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{
        dispatch_async(dispatch_get_main_queue(), ^{
            [application endBackgroundTask:self->bgTask];
            self->bgTask = UIBackgroundTaskInvalid;
    

2 个答案:

答案 0 :(得分:3)

您似乎正在尝试在后台执行代码,而不向用户显示通知。

根据定义,如果alertBody为nil,UILocalNotification将不会显示弹出窗口,即使将调用didReceiveLocalNotification提供应用程序正在运行。

如果应用程序在后台并且alertBody为空,则没有弹出警报并且没有执行任何代码。

答案 1 :(得分:2)

来自API documentation

  

<强> alertBody

     

...

     

分配一个字符串,或者最好是一个本地化字符串键(使用NSLocalizedString)作为消息的值。如果此属性的值为非零,则会显示警告。默认值为nil(无警报)。

您确定application:didReceiveLocalNotification:根本没有被调用过吗?或者只是你想念的警报?