46

在 Xcode 7.0.1 中,“模拟背景”获取命令会performFetchWithCompletionHandler触发两次。

这是 Xcode 调试错误,还是在运行应用程序发布版本的设备上发生。

更新 现在我们有 Xcode 7.1.1 并且仍然performFetchWithCompletionHandler被调用了两次。由于我不确定这是否也“在野外”发生,所以如果我的 fetch 操作已经在运行,我会保持状态。

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {
    if (self.performingFetch) {
        return completionHandler(UIBackgroundFetchResultNoData);
    }
    self.performingFetch = YES;
    ...
    self.performingFetch = NO;
}
4

1 回答 1

1

我通过在 App Delegate 中声明一个静态布尔值来解决这个问题,然后使用该布尔值让后台获取执行一次

if (!runOnce)
{
    [submission startSubmissionProcessWithCompletetionHandler:^(UIBackgroundFetchResult result){
        NSDate *fetchStart = [NSDate date];

        completionHandler(result);

        NSDate *fetchEnd = [NSDate date];
        NSTimeInterval timeElapsed = [fetchEnd timeIntervalSinceDate:fetchStart];
        NSLog(@"Background Fetch Duration: %f seconds", timeElapsed);
    }];
    runOnce = YES;
}
else
{
    completionHandler(UIBackgroundFetchResultNoData);
    runOnce = NO;
}
于 2016-02-11T09:22:27.570 回答