español - ios background service
PerformFetchWithCompletionHandler llamado dos veces al simular con Xcode (1)
Solucioné este problema declarando un booleano estático en el delegado de la aplicación, y luego usando el booleano para obtener la búsqueda de fondo para realizar una vez
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;
}
En Xcode 7.0.1, el comando de búsqueda "simular fondo" hace que performFetchWithCompletionHandler
dos veces.
¿Es esto un error de depuración de Xcode, o puede suceder esto en un dispositivo que ejecuta una versión de lanzamiento de la aplicación?
Actualizar Ahora tenemos Xcode 7.1.1 y aún performFetchWithCompletionHandler
se llama dos veces. Como no estoy seguro de si esto también ocurre "en la naturaleza", estoy manteniendo un estado si mi acción de búsqueda ya se está ejecutando.
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {
if (self.performingFetch) {
return completionHandler(UIBackgroundFetchResultNoData);
}
self.performingFetch = YES;
...
self.performingFetch = NO;
}