2015-10-13 10 views
46

aufgerufen wird. In Xcode 7.0.1 löst der Befehl "simulate background" fetch performFetchWithCompletionHandler zweimal aus.PerformFetchWithCompletionHandler wird zweimal aufgerufen, wenn mit Xcode

Ist dies ein Xcode-Debugging-Fehler oder kann dies auf einem Gerät auftreten, auf dem ein Release-Build der Anwendung ausgeführt wird. Jetzt

aktualisieren wir haben Xcode 7.1.1 und noch performFetchWithCompletionHandler wird zweimal aufgerufen. Da ich mir nicht sicher bin, ob dies auch "in der Wildnis" passiert, behalte ich einen Zustand, wenn meine Fetch-Aktion bereits läuft.

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler { 
    if (self.performingFetch) { 
     return completionHandler(UIBackgroundFetchResultNoData); 
    } 
    self.performingFetch = YES; 
    ... 
    self.performingFetch = NO; 
} 
+1

ich das Gleiche erleben (unabhängig ob '[application setMinimumBackgroundFetchInterval:] 'beim Start aufgerufen wird. – Graham

+1

Irgendwelche Updates zu diesem Thema? Ich erlebe das Gleiche. – Marcel

+1

gleiche Sache hier. xcode 7 und ios 9 – user3687

Antwort

1

Ich habe dieses Problem um durch eine statische boolean im App Delegierter erklärt, und dann die boolean mit dem Hintergrund holen bekommen einmal auszuführen

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