presentLocalNotificationNow和scheduleLocalNotification之间的区别

时间:2013-11-03 09:35:15

标签: ios iphone objective-c

presentLocalNotificationNowscheduleLocalNotification之间有什么区别。

以下两项功能均在1秒后显示通知

-(void)showLocalNotification:(NSNotification *)notification {

    NSString *msg = @"test message";

    [[UIApplication sharedApplication] cancelAllLocalNotifications];

    UILocalNotification *_localNotification = [[UILocalNotification alloc]init];

    _localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];

    _localNotification.timeZone = [NSTimeZone defaultTimeZone];

    _localNotification.alertBody = msg;

    _localNotification.soundName = UILocalNotificationDefaultSoundName;

    _localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber]+1;

    [[UIApplication sharedApplication] scheduleLocalNotification:_localNotification];

    // or 

    //[[UIApplication sharedApplication] presentLocalNotificationNow:_localNotification];
}

2 个答案:

答案 0 :(得分:2)

如果应用程序在后台运行,则本地通知将不会收到警报或声音,因为它直接由应用程序接收。在这种情况下,您需要使用presentLocalNotificationNow来显示通知。

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    UIApplicationState applicationState = application.applicationState;
    if (applicationState == UIApplicationStateBackground) {
        [application presentLocalNotificationNow:notification];
    }
}

来自Apple文档:

  

创建UILocalNotification实例后,即可安排   它使用UIApplication类的两种方法之一:   scheduleLocalNotification:或presentLocalNotificationNow:。前者   方法使用开火日期来安排交货;后一种方法   无论价值如何,都会立即显示通知   fireDate。您可以通过取消特定或所有本地通知   调用cancelLocalNotification:或cancelAllLocalNotifications,   分别

答案 1 :(得分:0)

这里没有区别,但是使用scheduleLocalNotification你可以在任何你需要的时间安排它,而不仅仅是一秒钟。 而且,没有人承诺,presentLocalNotificationNow将在一秒钟内显示一个,而不是在iOS 8中显示0.5或2.0。