2016-03-09 45 views
0

我需要使用一個沒有正確啓動的庫。調用一些方法後,它會創建一些NSOperation,它永遠不會完成,並與睡眠狀態​​錯誤結束了和,因爲我沒有這些操作的情況下,我無法將其取消。 有沒有可能取消它沒有訪問?是否有可能在無法訪問的情況下取消nsoperation?

+0

號停止/取消'NSOperation'你應該能夠訪問它。 –

+1

技術上講,你也將能夠取消操作,如果你有機會訪問託管'NSOperationQueue',我敢肯定你沒有訪問要麼... –

回答

3

請注意,即使你有機會訪問到NSOperation或它的隊列中,「取消」並不意味着「讓走。」這隻意味着「如果它尚未啓動,則不啓動,如果它已啓動,則設置取消標誌。」如果NSOperation沒有檢查其取消標誌,那麼它仍然不會終止。沒有辦法做你想做的事情,這是故意的。強行終止操作會使程序處於未定義狀態。

這聽起來像你要麼在圖書館中的錯誤,或者您是如何使用該庫中的錯誤(我懷疑後者之前前者,但它取決於庫)。你將需要追蹤該錯誤並解決它。

0

你可以訪問NSOperationQueue其中這些操作已被添加? 如果是的話,你可以像這樣訪問:

var queue = NSOperationQueue.mainQueue() 
    // or 
    queue = NSOperationQueue.currentQueue()! 

    let operations = queue.operations 
    for operation in operations{ 
     if operation.name == "name of operation if you know it" { 

      operation.cancel() 
     } 
    } 
+0

如果你要做到這一點,你可以使用'cancelAllOperations()'。相關操作不太可能位於主隊列或當前隊列中(如果它位於當前隊列中,那麼此代碼將不會運行,因爲當前隊列將被阻塞,並且如果它位於主隊列中,整個用戶界面將被鎖定,操作系統將殺死我們)。 –

+0

同意你Rob,但爲什麼這個代碼不會在當前隊列的情況下運行。我認爲行動可以同時進行 –

相關問題