2014-04-11 85 views
1

嗨,我使用Xcode 5+和iOS 7+,並實現NSOperationQueue。我創建了一個NSOpeartion的子類,並說我有50 +操作添加到NSOperationQueue。 isExecuting和isFinished被覆蓋在NSOperation`s啓動方法 -NSOperation完成後,不從NSOperationQueue中刪除?

-(void)start{ 

    // soeme code is here 

    [self willChangeValueForKey:@"isExecuting"]; 
    _isExecuting = YES; 
    [self didChangeValueForKey:@"isExecuting"]; 

    [self willChangeValueForKey:@"isFinished"]; 
    _ isFinished = NO; 
    [self didChangeValueForKey:@"isFinished"]; 
} 

和完成任務後,我編寫此代碼

[self willChangeValueForKey:@"isExecuting"]; 
    _isExecuting = NO; 
    [self didChangeValueForKey:@"isExecuting"]; 

    [self willChangeValueForKey:@"isFinished"]; 
    _ isFinished = YES; 
    [self didChangeValueForKey:@"isFinished"]; 

MaxConcurrentOperationCount爲2但2操作下一個(第三操作)完成之後沒有按不會執行主要方法。請給我一些關於何時出現這個問題的說明。

感謝

+0

上述代碼是否爲您的項目?你沒有設置_isFinished ... – Volker

+0

謝謝,這是我的錯誤,我編輯了上面的代碼。 –

回答

3

在啓動時,你應該設置isExecutingYES但你不應該設置isFinished可言,特別是不要YES

當你的異步操作完成後,您需要設置isExecutingNO,不YES,你需要設置isFinishedYES但要設置一個isExecuting第二次。

+0

謝謝,現在在更新NSOperation的main代碼後,我設置了isExecuting = NO,isFinished = NO,並且當操作完成後,我設置了isExecuting = NO,isFinished = YES。所以請告訴您這裏會出現什麼問題, –

+0

您需要在操作開始時將'isExecuting'設置爲'YES'。 – rmaddy

相關問題