[英]ASIHTTPRequest popViewControllerAnimated: => delegate EXEC_BAD_ACCESS
我將視圖 controller 設置為局部變量ASIHTTPFormDataRequest request
的委托。
但是,在請求完成之前點擊“返回”,彈出並取消分配視圖 controller。 因此,當請求完成並將消息-requestDidFinish:
發送到現在不存在的委托時,應用程序會因EXEC_BAD_ACECESS
異常而崩潰。
如何修復此崩潰?
我能想到的解決這個問題的一種方法是在導航 controller 彈出它后立即將代理設置為 nil。 但是,如果這是解決方案,我該怎么做? (ARC 的weak
引用現在會很好。)
我能想到的另一種方法是request
視圖 controller 的實例變量並調用[request clearDelegatesAndCancel]; [request release];
[request clearDelegatesAndCancel]; [request release];
在視圖控制器的dealloc
方法中。 這種方法在ASIHTTPRequest 示例代碼中進行了概述,但我被告知最好使用請求本地變量而不是實例變量。 而且,這個特定的視圖 controller 是一個設置表視圖 controller 並且有 13 個開關。 為了自動保存到服務器,每次切換時,每個開關都會創建並發送一個新請求。 如果我制作了 ivars,我必須制作 13 個。那是很多代碼!
想法? 想法?
我認為第一個問題是:如果用戶在按下開關后按下回,你想發生什么? IE。 是否應該取消 http 請求,或者請求到達服務器是否重要? 我現在假設您確實想取消它們,因為您的問題似乎暗示了這一點。
我被告知最好是請求本地變量而不是實例變量
我不確定這是否是個好建議——你幾乎總是希望請求不是局部變量,這樣你就可以處理這樣的情況。
對於您的情況,您可以考慮使用NSOperationQueue
。
執行此操作的粗略步驟是:
[request clearDelegatesAndCancel];
對於每一個,然后釋放隊列。這應該可以解決崩潰而不需要 13 個 ivars!
我通過保留請求委托來解決這個問題,例如NSURLConnection
保留其委托。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.