在我的应用程序中,我有一些 NSOperation 从在线数据库更新一些核心数据元素,有时更新需要一些时间,当 iPhone 屏幕锁定时,应用程序进入后台模式,并且此更新停止,所以我有重新打开应用程序以继续更新,所以我在几分钟前问过这个问题,我收到了这个正确的答案:
- (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?