當我有些視圖被加載圖像的背景與取消背景請求視圖中消失
問題是,如果我取消此view
而該方法的處理中,當完成的,它是試圖重新加載一個不存在的UITableView
。
我應該在取消視圖時取消後臺請求嗎?我怎樣才能做到這一點?
如果我在table
上檢查nil
,它仍然顯示一個指向表的指針,即使我在另一個頁面中。
當我有些視圖被加載圖像的背景與取消背景請求視圖中消失
問題是,如果我取消此view
而該方法的處理中,當完成的,它是試圖重新加載一個不存在的UITableView
。
我應該在取消視圖時取消後臺請求嗎?我怎樣才能做到這一點?
如果我在table
上檢查nil
,它仍然顯示一個指向表的指針,即使我在另一個頁面中。
您不應該使用performSelectorInBackground:withObject:
,因爲最好使用NSOperationQueue
以及它(和NSOperation
)爲取消活動提供的支持。然後,當視圖隱藏時,請致電[operationQueue cancelAllOperations]
。
(你顯然需要寫操作考慮,如果它已經被取消......)
這就是說,在後臺無論loadImages:
確實仍然可以通過檢查控制器前的狀態取消它試圖使用結果。您沒有顯示方法內容,但可能會檢查控制器上的BOOL
(如isCancelled
)是NO
,還是控制器視圖具有超級視圖。
謝謝,通過檢查視圖上的布爾值,你的意思是我將設置一個布爾值在viewWillDisappear中取消,比檢查它?或者如何檢查它是否有父視圖? – Curnelious
是的,添加一個'BOOL'' @ property',將其設置爲'viewWillDisappear'並檢入load方法。 – Wain
viewWillDisappear沒有被調用.. – Curnelious
您可以在重新加載之前查看您的表格視圖是否可見。你可以編寫一個輔助方法,或者在UIView上寫一個更好的類別來告訴給定的視圖是否可見。
在UIView的類別上聲明isVisibleOnScreen方法並像這樣實現它。
- (Bool)isVisibleOnScreen {
CGRect viewFrame = self.frame;
CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
return CGRectIntersectsRect(viewFrame, appFrame);
}
但是更好的異步工作方式是使用Grand Central Dispatch。它使您能夠更好地控制異步工作。
GCD很少提供取消支持的方式,您應該使用更高級別的NSOperationQueue API來獲取它。 – Wain
用戶despatch_que,然後在另一個線程運行 –