2012-04-10 67 views
1

我正在使用GCD進行網絡任務。我有一個表視圖控制器從服務器加載數據,但一旦我離開這個控制器並啓動另一個視圖控制器應用程序崩潰。我找不到解決這個問題的辦法。服務器的響應是一個NSArray,它是表視圖的數據源。當我得到響應時,我在控制器中設置了一個數據源屬性。我重寫setter並檢查當前視圖是否是表視圖,以及是否重新載入表。我是否錯誤地接近了這個?針對網絡任務iOS的GCD

謝謝

+0

請發佈您的代碼關於此操作。什麼是崩潰的調試輸出,崩潰發生在哪裏? – 2012-04-10 23:48:15

回答

0

聽起來像錯誤可能在各種各樣的地方。我的建議是將問題分解成越來越小的部分。這不一定簡單快捷。但是你會發現這個問題(並且在這個過程中學到很多東西)。

作爲第一步,嘗試用一些本地數據替換來自網絡的數據。如果你仍然有問題,那麼你可以排除處理網絡響應的代碼。

或者你可以換個方式:只是檢查請求中返回的數據。不要將它傳遞給應用程序。也許你會在響應中注意到空格式不正確的數據。我不認爲你的服務器返回NSArray。確保區分清楚(您可能會收到一些json格式化的數據並解析它)。

+0

對不起,我排除了塊正在返回一個NSArray。我實際上已經查明瞭這個問題。崩潰是一個objc_msgSend()錯誤。所以我的控制器正在發佈,我正在調用一個釋放對象的方法。我檢查控制器是否在當前屏幕上,如果是,則調用該方法。但是該方法在控制器目前不在屏幕上之後仍然被調用。所以我需要找到另一種方式,以便視圖不會更新。有什麼建議? – ish13 2012-04-11 02:31:14

+0

通常情況下,您可以通過在釋放對象後將對象設置爲零來防止調用釋放對象上的方法...然後在調用方法之前檢查對象是否存在:'if(myObject)[myObject someMethod];' – SundayMonday 2012-04-11 19:03:39

+0

它已經建立起來了,但它仍然在調用這個方法。所以控制器必須保持在內存中,然後在稍後的某個時間釋放。任何其他建議?謝謝 – ish13 2012-04-12 04:01:26