【问题标题】:Downloading and writing images from an array of urls crashing iPad从导致 iPad 崩溃的一系列 url 下载和写入图像
【发布时间】:2011-10-16 23:53:01
【问题描述】:

我正在使用单独线程中的以下代码将图像写入我的应用程序目录

for (int j =0; j<[sorted count]; j++) {
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[sorted objectAtIndex:j]]];
    UIImage *image = [UIImage imageWithData:data];
    if (image!=nil) {
        NSLog(@"%@",[sorted objectAtIndex:j]);
        [images addObject:image];
    }
}

for (int k=0;k<[images count];k++)
{
    NSString *temp = [[sorted objectAtIndex:k]lastPathComponent];
    NSString *imagePath = [dataPath stringByAppendingPathComponent:temp];
    NSData *data = UIImageJPEGRepresentation([images objectAtIndex:k], 1.0f);
    [data writeToFile:imagePath atomically:YES];

}

但奇怪的是最后两张图片没有被写入 我已经尝试了一切,但它似乎不起作用。 有人对此有任何想法吗?

【问题讨论】:

  • 您要下载多少张图片,它们有多大?您是否尝试过一次下载和编写一个,以免一次将它们全部塞进内存?
  • 因xml而异。大约 168 张图片,总大小超过 250 mb。
  • 嗯,就是这样。或者至少是一个促成因素。您无法一次处理 250mb。

标签: iphone objective-c uiimage saving-data data-retrieval


【解决方案1】:

不确定是什么导致了您的问题,但UIKit 不是线程安全的,所以这可能是原因。您可以尝试在主线程上执行您的代码来解决它(并检查它是否正确),然后,如果我的猜测是正确的,请寻找解决方法。

在寻找解决方法时,performSelector:onMainThread: 可能会有所帮助。

【讨论】:

  • 但是从主线程下载和保存会导致我的 UI 冻结,这是我启动单独线程的第一个原因。
  • 我只是建议一种方法来解决您的代码而不会出现非多线程 UIKit 问题...至于解决方法,您可以在主线程上执行转换(UIImageJPEGRepresentation,@987654324 @),一旦你有了NSData,就在一个单独的线程中写入/读取文件。如果问题与 UIKit 多线程有关,那么我认为没有其他办法。
猜你喜欢
  • 2020-04-19
  • 2017-12-21
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多