读取时未完全写入NSData writeToFile

时间:2012-06-21 08:41:39

标签: objective-c ios cocoa-touch

我正在编写一个iPhone应用程序,允许您在一个视图中浏览图像,并在另一个视图中创建它们。

创建图像的视图将使用以下代码将图像写入文档文件夹(当点击按钮以关闭视图时):

[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];

浏览器视图将使用以下方式加载图像:

UIImage *image = [UIImage imageWithContentsOfFile:path];

现在这10次完美地完成了9次。在加载图像之前,图像没有完全写入,因此下半部分将是黑色。最终将写入所有内容 - 如果我在浏览器中重新加载图像,则会显示完整图像。我认为这些事情在单个线程中始终是一致的。

我可以做些什么来阻止这种行为吗?

现在我正在考虑将新创建的图像传回浏览器,但这似乎是一个黑客攻击,因为浏览器也会显示您之前创建的所有图像。

2 个答案:

答案 0 :(得分:2)

如果您确定使用writeToFile:atomically:在主(UI)线程上保存图像,然后在主线程上也加载了图像,那么看起来该方法存在问题保持合同以在呼叫返回时完成操作。 iOS确实有时会有bug,也许你找到了一个。

但是,我还要注意,我看到类似问题出现的一种可能方式是assumptions are made about the order在离开时viewWillAppearviewDidDisappear等被调用时查看以显示另一个。因此,我还要确保图像不会保存在其中一种方法中。

由于您说问题显示的图像一半可见,我猜这不是这种情况,但我对其他任何有类似问题的人提出了警告。操作

答案 1 :(得分:1)

用于UI未及时完成的​​流程的标准解决方案是将其分解为新线程。也许你应该创建一个单独的线程来保存图像,然后通过委托方法通知UI来更新自己。