更新:這裏也報道此問題,原因的更詳細的治療:的Objective-C:UIImageWriteToSavedPhotosAlbum()+異步=問題
UIImageWriteToSavedPhotosAlbum saves only 5 image out of 10. Why?
在我的情況下,該錯誤是:「寫繁忙」 - 這似乎是與設備速度有關的問題。可能有一些解決方案需要手動處理線程或類似的東西 - 但是,在Tommy的回答下面,我序列化了保存圖像,並且解決了這個問題。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
現狀:
我試圖使用for-loop(圖像數量取決於用戶輸入 - 可能是1,2,3或理論上數百)保存圖像的大集合到相機卷。 NSSet
指向圖像(儘管我可以很容易地執行NSArray
),並且在for循環完成後NSSet
設置爲nil
。
我使用UIImageWriteToSavedPhotosAlbum()
要保存在分離的線程的圖像(使用NSThread
的detachNewThreadSelector:toTarget:withObject:
類方法),並啓動主線程上UIActivityIndicator
微調。
問題:
當我試圖挽救了超過〜5,〜5日將輸出此錯誤日誌中之後的任何圖像更:
*** -[NSKeyedUnarchiver initForReadingWithData:]: data is NULL
例如,讓我們說我導出了9張圖片。 for循環將遍歷所有9個圖像(由NSLogging確認),但我會繞過上述錯誤的4次迭代(並且只有5個圖像保存到相機膠捲中)。
但是,如果我在循環中添加一個斷點並在每次迭代之間等待一兩秒鐘,它們全部都會正確保存而不會有任何抱怨。所以..
理論:
根據我的記錄和觀察,UIImageWriteToSavedPhotosAlbum()
顯然是異步運行,在某種程度上「太慢」跟上我的應用程序。
有沒有一種簡單的方法來強制它同步運行(理想的主線程)?我一直在試圖爲我想要保存的圖像添加引用計數,但是(1)這感覺很拙劣,並且(2)我沒有解決問題。
任何建議將是偉大的。謝謝!
鎖定主線程意味着你的活動指示燈不會動畫。你的應用程序會掛起。 – danielbeard
是的,'UIImageWriteToSavedPhotosAlbum'以異步方式運行。錯誤日誌聽起來像是要保存的圖像爲空,請檢查圖像數據。 – fannheyward
@danielbeard - 是的,正確的,對不起 - 在**情況的第二段中澄清了我的線程** – toblerpwn