2015-10-13 67 views
46

在Xcode 7.0.1中,“模拟背景”获取命令导致performFetchWithCompletionHandler被触发两次。PerformFetchWithCompletionHandler在使用Xcode进行模拟时调用了两次

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

更新 现在我们有Xcode 7.1.1,仍然performFetchWithCompletionHandler被调用两次。由于我不确定这是否也发生在“野外”,我保持一个状态,如果我的抓取动作已经在运行。

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

我遇到同样的事情(不管在启动过程中是否调用[application setMinimumBackgroundFetchInterval:]')。 – Graham

+1

这有什么更新?我也经历过同样的事情。 – Marcel

+1

这里同样的事情。 xcode 7和ios 9 – user3687

回答

1

我解决此问题得到了通过在App委托声明一个静态布尔,然后使用布尔拿到后台抓取进行一次

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; 
} 
相关问题