0

我正在編寫一個應用程序,該應用程序在接近事件日期時通過通知中心向用戶發送警報。但是,當我在日期選擇器中設置日期並關閉應用程序時,通知不會顯示。我已在我的配置文件中啓用了推送通知。這可能是因爲我的objectForKey區域。我有2個筆尖(一個用於iPhone,一個用於iPad),名爲ImportantDatesViewController_iPhone1和ImportantDatesViewController_iPad1。我是否應該將objectForKey區域更改爲nib名稱而不是「ImportantDatesViewController」?而我的.h和.m文件名也僅僅是ImportantDatesViewController。對不起,我仍然很新,並且隨時瞭解情況。 這是所有在我的項目,與通知中心打交道的代碼,這就是我把我的視圖控制器:iPhone iOS:本地通知未顯示

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
UILocalNotification *localNotif = [[UILocalNotification alloc] init]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"mm'/'dd'/'yyyy"]; 

NSDate *eventDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"ImportantDatesViewController.selectedDate"]; 


localNotif.fireDate = [eventDate dateByAddingTimeInterval:-60*60*60]; 
localNotif.timeZone = [NSTimeZone defaultTimeZone]; 

localNotif.alertBody = @"Event coming in three days!"; 

localNotif.alertAction = nil; 

localNotif.soundName = UILocalNotificationDefaultSoundName; 
localNotif.applicationIconBadgeNumber = 0; 
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];  

return YES; 

}

我也是在應用中添加該代碼在我的didFinishLaunchingWithOptions方法代表底部,我認爲它會做的伎倆:

[[UIApplication sharedApplication]registerForRemoteNotificationTypes: 
UIRemoteNotificationTypeBadge | 
UIRemoteNotificationTypeAlert | 
UIRemoteNotificationTypeSound]; 

任何幫助非常感謝,謝謝!

+0

只是一個側面說明,我以前發佈這個,但它張貼錯誤,我刪除了前一個,並以正確的格式發佈。 – John

+0

可能重複[iPhone本地通知不會出現](http://stackoverflow.com/questions/8958898/iphone-local-notifications-wont-appear) – Abizern

回答

4

告訴它在您設置並立即設置一段時間之前通過設置(NOW)-60 * 60 * 60立即發出通知。通知已通過。

[[UIApplication sharedApplication]presentLocalNotificationNow:localNotif]; 

,如果你想設置的具體時間爲:

[[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; 

如果指定的值爲零或者是過去的日期,通知被立即傳送。 作爲一個便箋,請務必將timeZone和Locale設置爲你想要的。

+1

我從來沒有真正檢查,直到你剛纔提到它,但我的出現在那裏。如果您在設備上進行測試,我不會看到任何原因。 –

+0

噢,還有一件事情,在用戶設置日期選擇器到達之前60小時,嘗試發送通知的正確公式是-60 * 60 * 60? – John

+1

我無法確定,因爲我使用NSDateComponents工作了很多,只需將小時設置爲-60。但是你的解決方案看起來也很紮實,我不能100%確定。有時候有不止一種方法來做同樣的事情。 –

1
UILocalNotifications *localNotif = [[UILocalNotification alloc] init]; 

    if (localNotif == nil) return; 
    NSDate *fireTime = [[NSDate date] dateByAddingTimeInterval:900] ; //15 min 

      localNotif.fireDate = fireTime; 
      localNotif.alertBody = @"Parking your CAR 15 Minutes reached.."; 
      // localNotif.repeatInterval=kCFCalendarUnitMinute; 
      [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; 
1

以下是LocalNotification的示例代碼,適用於我的項目。

在AppDelegate中文件此代碼塊:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
     [launchOptions valueForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 
     // Override point for customization after application launch. 
     return YES; 
    } 

    // This code block is invoked when application is in foreground (active-mode) 
    -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { 

     UIAlertView *notificationAlert = [[UIAlertView alloc] initWithTitle:@"Notification" message:@"This local notification" 
     delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 

     [notificationAlert show]; 
     // NSLog(@"didReceiveLocalNotification"); 
    } 

在任何視圖控制器的.m文件此代碼塊:

-(IBAction)startLocalNotification { // Bind this method to UIButton action 
    NSLog(@"startLocalNotification"); 

    UILocalNotification *notification = [[UILocalNotification alloc] init]; 
    notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:7]; 
    notification.alertBody = @"This is local notification!"; 
    notification.timeZone = [NSTimeZone defaultTimeZone]; 
    notification.soundName = UILocalNotificationDefaultSoundName; 
    notification.applicationIconBadgeNumber = 10; 

    [[UIApplication sharedApplication] scheduleLocalNotification:notification];  
} 

上面的代碼顯示7秒的時間間隔之後的AlertView按下時on按鈕綁定「startLocalNotification」 如果應用程序在後臺,那麼它會顯示BadgeNumber爲10並使用默認通知聲音。