无法在didReceiveRemoteNotification中执行代码fetchCompletionHandler

时间:2016-11-27 17:11:13

标签: ios objective-c

我正在使用静默推送通知,并在推送通知到达设备时设法调用didReceiveRemoteNotification。但是,当委托执行时,我无法执行我的代码。根据下面的代码,我能够观察到{"打印进度1"的NSLog,但我无法看到"打印进度2"。

有人可以告知以下用法是否不准确?我试图在后台延长任务的时间。我尝试删除beginBackgroundTaskWithExpirationHeader,但代码也不会执行。

-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result)) handler {
    NSLog(@"Print progress 1");

    UIApplication *app = [UIApplication sharedApplication];
    UIBackgroundTaskIdentifier bgTask;
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^ {

        ///..... Background thread codes.... 

        NSLog(@"Print progress 2");

        [app endBackgroundTask:bgTask];
        handler(UIBackgroundFetchResultNoData);
    }];
}

1 个答案:

答案 0 :(得分:0)

你应该检查你的背景是否需要很长时间,也许应用程序在到达记录点"Print Progress 2"之前被杀死了:

  

运行后台任务的应用有有限的时间   运行它们。 (你可以找出使用的时间有多少   backgroundTimeRemaining财产。)如果你不打电话   在时间到期之前,每个任务endBackgroundTask:系统终止   应用

和/或应该正确调试并确保您的代码已执行:

  

如果您在调试后台任务代码时遇到问题,那么就是您   可能会尝试使用beginBackgroundTaskWithName:expirationHandler:   方法而不是这个。该方法提供与以下相同的行为   这个,但允许您为任务指定调试器可见名称。