PerformFetchWithCompletionHandler дважды вызывается при имитации с помощью Xcode
В Xcode 7.0.1 команда "emulate background" fetch вызывает срабатывание 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;
}
Ответы
Ответ 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;
}