2010-07-12 46 views
13

我使用處理本地通知:本地通知「didReceiveLocalNotification」調用兩次

- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notif 

並安排本地通知:當我收到通知,didReceiveLocalNotification:被調用兩次

- (void)scheduleNotificationWithInterval:(int)minutesBefore { 
    UILocalNotification *localNotif = [[UILocalNotification alloc] init]; 

    if (localNotif == nil) 
     return; 

    NSDate *fireDate = [NSDate date]; 
    localNotif.fireDate = [fireDate dateByAddingTimeInterval:minutesBefore*60]; 
    localNotif.timeZone = [NSTimeZone defaultTimeZone]; 
    localNotif.repeatInterval = kCFCalendarUnitMinute; 
    localNotif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"LocalEvent notification in %i minutes.", nil),minutesBefore]; 
    localNotif.alertAction = NSLocalizedString(@"View Details", nil); 
    localNotif.applicationIconBadgeNumber = 1; 

    NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:@"This is dict, you can pass info for your notification",@"info",nil]; 
    localNotif.userInfo = infoDict; 

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; 

    [localNotif release]; 
    NSLog(@"Event scheduled"); 
} 

我做錯了什麼?

請幫忙。

謝謝。

回答

27

我認爲在模擬器中有一個已知的錯誤,它觸發委託通知方法兩次。它不應該發生在設備上,與XCode連接或不連接。

+7

我不確定爲什麼,但是我也在設備上面對這個問題(多次didReceiveLocalNotification),所以我維護一個稱爲狀態的字段並手動檢查該通知的狀態字段,如果它已經被觸發 – user1046037 2012-06-07 10:25:44

14

我也面臨着同樣的問題和解決方案,我發現是,在didReceiveLocalNotification

if (state == UIApplicationStateActive) { 
    NSLog(@"UIApplicationStateActive"); 
} 
else if(state == UIApplicationStateInactive){ 
    NSLog(@"UIApplicationStateInActive"); 
} 

在這裏這些條件我只是寫,我想我的應用程序執行的代碼編寫代碼通知,處於活動模式並處於非活動模式

1

我懷疑通知正在重新觸發,只要它在同一秒內仍然存在。我通過在處理程序中將fireDate設置爲零來固定它:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
    UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:notification.alertAction message:notification.alertBody delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alertView show]; 

    notification.fireDate = nil; 

} 
1

我有同樣的問題。這是由於在AppDelegate的'didFinishLaunchingWithOptions'中調用'registerUserNotificationSettings'兩次造成的。但是,簡單地刪除重複呼叫並沒有解決問題。我不得不刪除應用程序,然後重建。只有這樣,雙重本地通知問題纔得到解決。