【发布时间】:2014-01-08 06:35:01
【问题描述】:
我意识到这是其他人在我之前遇到过的问题,但我似乎无法找到一个好的解决方案。我的问题是我想遍历存储在NSOperationQueue 中的一些操作,当所有操作完成后我想发布一个通知。通知启动依赖于所有操作已完成的最终过程。但是,我的通知在操作完成之前发送了几次。这是我的方法:
self.queueFinished=FALSE;
[self createFileobjectsForDirectories:self.mymode];
这会产生一个操作数组(self.arrayOfOperations),它会被进一步使用:
[self.myFileobjectsQueue addOperations:self.arrayOfOperations waitUntilFinished:NO];
NSInvocationOperation *completionOperation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(runLastOperation:)
object:start];
for (NSOperation *myOp in self.myFileobjectsQueue.operations){
[completionOperation addDependency:myOp];
}
[completionOperation setQueuePriority:NSOperationQueuePriorityVeryLow];
[self.myFileobjectsQueue addOperation:completionOperation];
-(void) runLastOperation:(NSDate*) start {
[[NSNotificationCenter defaultCenter] postNotificationName:kCompareFinished object:nil userInfo:nil];
self.queueFinished=TRUE;
}
我尝试了几种方法来观察我的队列何时按照elsewhere 的建议完成,但均未成功。这几乎就像在队列为空时调用通知,但在操作完成任务之前。但是根据 Apple 文档,直到 isFinished 标志为 TRUE 之前,该操作不会从队列中删除。我正在使用NSOperation 的子类中的常规主函数运行并发操作。也许我在这里误解了一些东西,但是关于如何确保不仅队列是空的,而且确保操作已经完成的建议将不胜感激。
干杯,特隆德
【问题讨论】:
标签: objective-c cocoa objective-c-blocks nsoperation nsoperationqueue