2015-10-13 73 views
46

在Xcode 7.0.1中,「模擬背景」獲取命令導致performFetchWithCompletionHandler被觸發兩次。PerformFetchWithCompletionHandler在使用Xcode進行模擬時調用了兩次

這是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

我遇到同樣的事情(不管在啓動過程中是否調用[application setMinimumBackgroundFetchInterval:]')。 – Graham

+1

這有什麼更新?我也經歷過同樣的事情。 – Marcel

+1

這裏同樣的事情。 xcode 7和ios 9 – user3687

回答

1

我解決此問題得到了通過在App委託聲明一個靜態布爾,然後使用布爾拿到後臺抓取進行一次

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; 
} 
相關問題