13

私は以下を使用してローカル通知を処理しています:

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

ローカル通知をスケジュールするには:

- (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");
}

通知を受け取ると、didReceiveLocalNotification:2 回呼び出されます。

私は何か間違ったことをしていますか?

助けてください。

ありがとう。

4

4 に答える 4

27

シミュレーターには、デリゲート通知メソッドを 2 回起動する既知のバグがあると思います。XCode にテザリングされているかどうかに関係なく、デバイスでは発生しないはずです。

于 2010-07-30T20:37:20.540 に答える
14

私も同じ問題に直面していました、そして私が見つけた解決策は、didReceiveLocalNotificationでこのコードを書くことです

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

ここでは、これらの状態で、アクティブモードと非アクティブモードで、通知時にアプリケーションに実行させたいコードを記述します。

于 2011-08-20T07:59:10.303 に答える
1

同じ秒内にある限り、通知が再トリガーされていると思われます。ハンドラーでfireDateをnilに設定して修正しました:

- (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;

}
于 2013-12-29T03:16:42.517 に答える