我的iPhone客戶端有很多涉及異步請求,很多時間一致地修改字典或數組的靜態集合。其結果,是很常見的我看到這需要較長時間較大的數據結構從具有以下錯誤的服務器中檢索:iPhone對異步URL請求使用互斥鎖
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <NSCFArray: 0x3777c0> was mutated while being enumerated.'
這通常意味着兩個請求到服務器回來與試圖數據修改相同的集合。我正在尋找的是關於如何正確構建我的代碼以避免這種有害錯誤的教程/示例/理解。我相信正確的答案是互斥體,但我從未親自使用它們。
這是使用NSURLConnection創建異步HTTP請求,然後在請求完成後使用NSNotification Center作爲委派手段的結果。當發射改變相同集合集的請求時,我們得到這些衝突。
問題是,'背景'線程不是由我明確創建的。它們是異步NSURLConnection請求的結果。我無法通過代碼與主線程通話。您的其他建議很有用,但我很感激。 – Coocoo4Cocoa 2009-02-16 19:57:29
我相信NSURLConnection的委託將在啓動加載操作的線程上調用,而不一定是創建該對象的線程。所以你可以合併你的委託方法中的數據。 – sbooth 2009-02-17 05:40:13