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