2014-03-31 24 views
0

當我有些視圖被加載圖像的背景與取消背景請求視圖中消失

​​

問題是,如果我取消此view而該方法的處理中,當完成的,它是試圖重新加載一個不存在的UITableView

我應該在取消視圖時取消後臺請求嗎?我怎樣才能做到這一點?

如果我在table上檢查nil,它仍然顯示一個指向表的指針,即使我在另一個頁面中。

+0

用戶despatch_que,然後在另一個線程運行 –

回答

0

您不應該使用performSelectorInBackground:withObject:,因爲最好使用NSOperationQueue以及它(和NSOperation)爲取消活動提供的支持。然後,當視圖隱藏時,請致電[operationQueue cancelAllOperations]

(你顯然需要寫操作考慮,如果它已經被取消......)

這就是說,在後臺無論loadImages:確實仍然可以通過檢查控制器前的狀態取消它試圖使用結果。您沒有顯示方法內容,但可能會檢查控制器上的BOOL(如isCancelled)是NO,還是控制器視圖具有超級視圖。

+0

謝謝,通過檢查視圖上的布爾值,你的意思是我將設置一個布爾值在viewWillDisappear中取消,比檢查它?或者如何檢查它是否有父視圖? – Curnelious

+0

是的,添加一個'BOOL'' @ property',將其設置爲'viewWillDisappear'並檢入load方法。 – Wain

+0

viewWillDisappear沒有被調用.. – Curnelious

0

您可以在重新加載之前查看您的表格視圖是否可見。你可以編寫一個輔助方法,或者在UIView上寫一個更好的類別來告訴給定的視圖是否可見。

在UIView的類別上聲明isVisibleOnScreen方法並像這樣實現它。

- (Bool)isVisibleOnScreen { 

    CGRect viewFrame = self.frame; 
    CGRect appFrame = [[UIScreen mainScreen] applicationFrame]; 
    return CGRectIntersectsRect(viewFrame, appFrame); 

} 

但是更好的異步工作方式是使用Grand Central Dispatch。它使您能夠更好地控制異步工作。

+0

GCD很少提供取消支持的方式,您應該使用更高級別的NSOperationQueue API來獲取它。 – Wain