我意識到這是其他人以前遇到的問題,但我似乎無法找到一個好的解決方案。我的問題是我想循環存儲在NSOperationQueue中的一些操作,並且當所有操作完成後,我想發佈通知。通知開始一個依賴所有操作完成的最終進程。但是,我的通知在操作完成前多次發送。這是我的方法:NSOperationqueue和postnotification完成時
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的子類中的常規主函數運行併發操作。也許我在這裏誤解了一些東西,但是如何確保隊列不是空的,還要確保操作已經完成,我們將不勝感激。
乾杯,特龍
「使其依賴於所有其他操作」 - 這不是OP已經在做什麼? –
這正是我正在做的。我最後一次NSInvocationOperation取決於所有其他操作。最後的操作應該調用runLastOperation併發出通知。通知在12個操作隊列中關閉4-5次,我不明白爲什麼。 –
那麼什麼時候操作定義爲完成(添加日誌記錄),同時運行多少個(添加日誌記錄),將斷點添加到通知文章中。這些都告訴你操作的順序是什麼? – Wain