更新:这里也报道此问题,原因的更详细的治疗:的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