我正在编写一个 iPhone 应用程序,它允许您在一个 View 中浏览图像,并在另一个 View 中创建它们。
创建图像的 View 将使用以下代码将图像写入文档文件夹(当点击按钮关闭 View 时):
[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];
浏览器 View 将使用以下方式加载图像:
UIImage *image = [UIImage imageWithContentsOfFile:path];
现在 10 次中有 9 次都能完美运行。十分之一的图像在我加载之前没有完全写入,所以它的下半部分将是黑色的。一切最终都会被写入 - 如果我在浏览器中重新加载图像,则会显示完整的图像。我认为这些东西在一个线程中总是一致的。
我可以做些什么来防止这种行为吗?
现在我正在考虑将新创建的图像传回浏览器,但这似乎是一种 hack,因为浏览器也会显示您之前创建的所有图像。
Best Answer-推荐答案 strong>
如果您确定图像正在使用 writeToFile:atomically: 保存在主 (UI) 线程上,然后图像也在主线程上加载,那么它看起来像该方法在调用返回时维护其契约(Contract)以完成操作存在问题。 iOS 有时确实存在错误,也许你发现了。
不过,我还要指出,我看到出现类似问题的一种可能方式是,当 assumptions are made about the order其中 viewWillAppear 、viewDidDisappear 等在离开一个 View 以显示另一个 View 时被调用。所以,我还要确保图像没有以这些方法之一保存。
既然你说问题显示的图像是 half 可见的,我猜这不是这种情况,但我将警告包含在 order-of- 中遇到类似问题的任何其他人操作。
关于objective-c - NSData writeToFile 读取时未完全写入,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/11134483/
|