2015-10-13 19 views
46

Trong Xcode 7.0.1 lệnh tìm nạp "mô phỏng nền" khiến cho performFetchWithCompletionHandler được kích hoạt hai lần.PerformFetchWithCompletionHandler được gọi hai lần khi mô phỏng bằng Xcode

Đây có phải là lỗi gỡ lỗi Xcode hay điều này có thể xảy ra trên thiết bị chạy bản phát hành ứng dụng.

Cập nhật Bây giờ chúng tôi có Xcode 7.1.1 và vẫn performFetchWithCompletionHandler được gọi hai lần. Vì tôi không chắc chắn nếu điều này cũng xảy ra "trong tự nhiên" Tôi đang giữ trạng thái nếu hành động tìm nạp của tôi đã chạy.

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

Tôi đang trải qua những điều tương tự (không phân biệt cho dù '[application setMinimumBackgroundFetchInterval:]' được gọi trong khi khởi động). – Graham

+1

Mọi cập nhật về điều này? Tôi cũng trải nghiệm điều tương tự. – Marcel

+1

điều tương tự ở đây. xcode 7 và ios 9 – user3687

Trả lời

1

tôi xung quanh vấn đề này bằng cách tuyên bố một boolean tĩnh trong App đại biểu, và sau đó sử dụng boolean để có được nền lấy để thực hiện một lần

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; 
} 
Các vấn đề liên quan