내 앱에 온라인 데이터베이스의 일부 핵심 데이터 요소를 업데이트하는 NSOperation이 있는데 언젠가는 업데이트가 필요하며 잠시 기다려야합니다. 앱이 백그라운드 모드에서 입력하고이 업데이트 중지, 그래서 업데이트를 계속하려면 응용 프로그램을 다시, 그래서 난에 SO, 내가받은 몇 분 전이 정답이를 요청했습니다 :두 NSOperationQueue가 백그라운드 작업 모드를 중지하기 위해 endBackgroundTask를 호출하는 것을 확인했을 때
- (void)someMethodToKeepRunningInBackground {
UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) {
// Uh-oh - we took too long. Stop task.
}];
// Perform task here
CheckForUpdate *checkUpdate = [[CheckForUpdate alloc] init];
[sectionCheckUpdateQueue addOperation:checkUpdate];
if (taskId != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:taskId];
}
}
을
문제는 내가 업데이트를 수행하기 위해 더 많은 NSOperationQueue를 실행한다는 것입니다. 위에서 작성한 sectionCheckUpdateQueue는 다른 NSOperationQueue에서 더 많은 NSOperation을 찾을 수 있으면 호출 할 수 없습니다. 이 :
endBackgroundTask:taskId
내가이 NSOperationQueue 그래서 내 질문은, 완료되면 모르는, 그래서이 NSOperationQueue이 endBacgkround 전화를 너무 완료되면 내가 감지 할 수있는 방법 때문에 : TASKID를?
당신이 밖으로 권리를 찾기 위해'NSOperations' 완료 블록을 사용할 수 있습니까? 이 완료 블록 호출을 기반으로 모든 작업이 완료되었는지 감지하고 총 카운트가 0이면 일부 작업은 'endBackgroundTask'작업을 수행 할 수 있습니다. – iDev
예를 써주시겠습니까? – Piero
그렇지 않으면'NSOperationQueue'의'operationCount' 속성을 확인하십시오. https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSOperationQueue_class/Reference/Reference.html#//apple_ref/occ/instm/NSOperationQueue/operationCount – iDev