Подтвердить что ты не робот

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;
}
4b9b3361

Ответ 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;
}