2013-11-03 117 views
3

之間的區別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]; 
} 

回答

0

有沒有區別就在這裏,但使用scheduleLocalNotification你可以在任何你想要的時間安排它,不僅是在一秒鐘。例如,對於corse,沒有人承諾presentLocalNotificationNow會在一秒內顯示一個,而不是在iOS 8的0.5或2.0中顯示。

2

如果應用程序在後臺運行,本地通知將不會收到警報或聲音,因爲它直接由應用程序接收。在這種情況下,您需要使用presentLocalNotificationNow來呈現通知。

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

從蘋果文檔:

一旦你創建UILocalNotification的一個實例,您計劃使用它的UIApplication類兩種方法之一 : scheduleLocalNotification:或presentLocalNotificationNow :.前者 方法使用火災日期來計劃交貨;後一種方法 會立即顯示通知,而不管 fireDate的值如何。您可以通過 取消特定或全部本地通知,分別調用cancelLocalNotification:或cancelAllLocalNotifications, 。