2013-02-22 70 views
2

在我的應用程序中,通過循環遍歷我想對其進行某些操作的文件數組,將併發操作添加到我的NSOperationQeueu。我想知道當隊列爲空,所有的操作都完成了,所以我使用(簡稱縮小版本):如何確保NSOperationQueue真的是空的

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ 

     if (object == myLocalModeController.myFileobjectsQueue && [keyPath isEqualToString:@"operations"]) { 


     if ([myLocalModeController.myFileobjectsQueue.operations count] == 0) { 
      NSLog(@"Local: Fileobject creation has completed"); 
      } 
     } 
    } 

我的問題是,有時操作是如此輕巧,他們立即完成,而隊列仍然被添加到。這導致頻繁發生的情況是隊列中的項目數爲零,但操作尚未完成。但是,根據我當前的設置,該程序認爲自從'[myLocalModeController.myFileobjectsQueue.operations count] == 0'以來,操作已經完成。有關如何確保隊列真正完成並且所有操作都已結束的任何建議?謝謝。歡呼聲中,特龍

回答

2

你可能想阻止所有操作,而使用的是將它們添加setSuspended:

- (void)setSuspended:(BOOL)suspend; 

所以加入將其設置爲YES,當你完成你將它設置爲所有操作之前沒有。

+1

很好的答案。或者Trond可以添加全局的「仍然設置」標誌,或者像「配置操作」這樣的其他屬性。 – 2013-02-22 21:40:20