【发布时间】:2012-06-21 08:41:38
【问题描述】:
我正在编写一个 iPhone 应用程序,它允许您在一个视图中浏览图像,并在另一个视图中创建它们。
创建图像的视图将使用以下代码将图像写入文档文件夹(当点击按钮关闭视图时):
[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];
浏览器视图将使用以下方式加载图像:
UIImage *image = [UIImage imageWithContentsOfFile:path];
现在 10 次中有 9 次都能完美运行。十分之一的图像在我加载之前没有完全写入,所以它的下半部分将是黑色的。一切最终都会被写入 - 如果我在浏览器中重新加载图像,则会显示完整的图像。我认为这些东西在一个线程中总是一致的。
我可以做些什么来防止这种行为吗?
现在我正在考虑将新创建的图像传回浏览器,但这似乎是一种 hack,因为浏览器也会显示您之前创建的所有图像。
【问题讨论】:
-
你能显示哪个方法正在调用
writeToFile:atomically:吗?是按钮点击处理程序,还是viewWillDisappear:,还是别的什么?你检查过writeToFile:的返回值吗?你能试试writeToFile:的另一个变体,它允许你传入NSError吗? -
当点击按钮然后关闭视图时图像被保存。图像在浏览器视图的 viewDidLoad 中加载。实际上,它很难重现,我认为它更像是 1/100 或 1/1000。昨天看了3-4次。恐怕已经够打扰了。现在我来回翻转时似乎不会发生这种情况。
-
另外,我已经在多个设备(4S、3GS、iPad)上看到了这个。
-
这里有一个类似的未回答问题:cocoabuilder.com/archive/cocoa/…。也许对运行循环存在未记录的依赖关系?
-
啊,我并不孤单。我发现了同样的问题:stackoverflow.com/questions/11161079/…(仍然没有解决方案)。
标签: objective-c ios cocoa-touch