modes español app ios objective-c xcode swift background-fetch

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