0

在我的应用程序中,我有一些 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?

4

1 回答 1

2

您可以致电waitUntilAllOperationsAreFinished了解NSOperationQueue所有操作何时完成。

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperationQueue_class/Reference/Reference.html#//apple_ref/occ/instm/NSOperationQueue/waitUntilAllOperationsAreFinished

于 2012-12-07T11:54:12.357 回答