【问题标题】:PerformFetchWithCompletionHandler called twice when simulating with Xcode使用 Xcode 进行模拟时,PerformFetchWithCompletionHandler 调用了两次
【发布时间】:2016-01-11 09:15:02
【问题描述】:

在 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;
}

【问题讨论】:

  • 我正在经历同样的事情(不管在启动期间是否调用了[application setMinimumBackgroundFetchInterval:])。
  • 这方面有什么更新吗?我也有同样的经历。
  • 这里也一样。 xcode 7 和 ios 9
  • 另一个“我也是”。似乎是 iOS 9 的错误,因为 iOS 9 上的 Xcode 6.4 也会发生,iOS 8.4 上的 Xcode 7 不会发生。
  • 我认为这是 iOS 9 的错误。我也可以确认它也发生在“野外”

标签: ios objective-c xcode swift background-fetch


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多