Предупреждение: делегат приложения получил вызов

Я реализую локальный метод уведомления, но получил это предупреждение

Warning: Application delegate received call to -application:handleActionWithIdentifier:forLocalNotification:withResponseInfo:completionHandler: but the completion handler was never called.

Вот мой код в didfinishlaunchmethod

if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {



        UIMutableUserNotificationAction *snooze=[[UIMutableUserNotificationAction alloc] init];
        [snooze setActivationMode:UIUserNotificationActivationModeBackground];
        [snooze setTitle:@"Snooze"];
        [snooze setIdentifier:NotificationActionOneIdent];
        [snooze setDestructive:NO];
        [snooze setAuthenticationRequired:YES];

        UIMutableUserNotificationAction *cancel=[[UIMutableUserNotificationAction alloc] init];
        [cancel setActivationMode:UIUserNotificationActivationModeBackground];
        [cancel setTitle:@"Cancel"];
        [cancel setIdentifier:NotificationActionTwoIdent];
        [cancel setDestructive:NO];
        [cancel setAuthenticationRequired:YES];

        UIMutableUserNotificationCategory *actionCategory;
        actionCategory = [[UIMutableUserNotificationCategory alloc] init];
        [actionCategory setIdentifier:NotificationCategoryIdent];
        [actionCategory setActions:@[cancel, snooze]
                        forContext:UIUserNotificationActionContextDefault];

        NSSet *categories = [NSSet setWithObject:actionCategory];

        UIUserNotificationType types = (UIUserNotificationTypeAlert|
                                        UIUserNotificationTypeSound|
                                        UIUserNotificationTypeBadge);

        UIUserNotificationSettings *settings;
        settings = [UIUserNotificationSettings settingsForTypes:types
                                                     categories:categories];

        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];

и вот код для обработчика завершения

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void(^)())completionHandler
 {
    NSLog(@"called");
    if ([identifier isEqualToString:NotificationActionOneIdent]) {


        NSLog(@"You choose snooze");
        UILocalNotification *localNotif = [[UILocalNotification alloc] init];
        if (localNotif == nil) return;

        NSDate *fireTime = [[NSDate date]   dateByAddingTimeInterval:900];

        localNotif.fireDate = fireTime;
        localNotif.alertBody = @"Time to wake up";
        localNotif.repeatInterval=kCFCalendarUnitMinute;
        [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];


    }
    else if ([identifier isEqualToString:NotificationActionTwoIdent]) {

        NSLog(@"You choose cancel");
    }

        completionHandler();
}

Но я снова и снова получаю одно и то же предупреждение.. пожалуйста, помогите мне с этим вопросом.

1 ответ

Решение

У вас есть точка выхода в функции дескриптора, которая не вызывает completionHandler()

if (localNotif == nil) return;

Исправьте это, и ошибка должна исчезнуть.

if (localNotif != nil) {
        NSDate *fireTime = [[NSDate date]   dateByAddingTimeInterval:900];
        localNotif.fireDate = fireTime;
        localNotif.alertBody = @"Time to wake up";
        localNotif.repeatInterval=kCFCalendarUnitMinute;
        [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
}
Другие вопросы по тегам