Mar*_*Him 46 xcode objective-c ios swift background-fetch
在Xcode 7.0.1中,"模拟背景"获取命令导致performFetchWithCompletionHandler两次触发.
这是一个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;
}
Run Code Online (Sandbox Code Playgroud)
小智 1
我通过在应用程序委托中声明一个静态布尔值来解决这个问题,然后使用该布尔值来执行一次后台提取
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;
}
Run Code Online (Sandbox Code Playgroud)