3

presentLocalNotificationNow和有什么区别scheduleLocalNotification

对于以下两个功能都在 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];
}
4

2 回答 2

3

如果应用程序在后台运行,本地通知将不会收到警报或声音,因为它是由应用程序直接接收的。在这种情况下,您需要使用 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 来取消特定或所有本地通知。

于 2013-11-03T09:40:12.090 回答
0

这里没有区别,但是使用scheduleLocalNotification你可以在任何你想要的时间安排它,而不仅仅是一秒钟。而且,当然,没有人向你保证presentLocalNotificationNow会在一秒钟内显示一个,而不是在 iOS 8 中的 0.5 或 2.0 中,例如。

于 2013-11-03T09:37:57.827 回答