在我的iPhone应用程序中,我正在从网络上下载一些图像。它是否阻塞UI线程无关紧要,实际上,它需要阻塞UI线程直到完全下载。完成后,我通知UI唤醒并显示它们。

我的(简化)代码如下所示:

for (int i=0; i<10; i++)
{
    //call saveImageFromURL (params)
}
//Call to Notify UI to wake up and show the images

+(void) saveImageFromURL:(NSString *)fileURL :(NSString *)destPath :(NSString *)fileName
{
    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]];

    NSFileManager * fileManager = [NSFileManager defaultManager];

    BOOL bExists, isDir;
    bExists = [fileManager fileExistsAtPath:destPath isDirectory:&isDir];

    if (!bExists)
    {
        NSError *error = nil;
        [fileManager createDirectoryAtPath:destPath withIntermediateDirectories:YES attributes:nil error:&error];
        if (error)
        {
            NSLog(@"%@",[error description]);
            return;
        }
    }

    NSString *filePath = [destPath stringByAppendingPathComponent:fileName];
    [data writeToFile:filePath options:NSAtomicWrite error:nil];
}

当完成for循环后,我很确定所有图像都存储在本地。而且它在模拟器中也可以正常工作。

但是,它在我的设备上无法正常运行。存储图像之前,UI会唤醒。几乎所有图像似乎都是空的。

我究竟做错了什么?

最佳答案

  • 检查您的设备是否可以下载这些图像,请在Mobile Safari中访问图像URL进行测试。 dataWithContentsOfURL:将返回nil或它不是正确的图像数据,例如找不到404
  • 记录[data writeToFile:filePath]的错误以查看保存的详细信息。
  • 关于iphone - NSData writeToFile可在模拟器上使用,但不能在设备上使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17662743/

    10-10 16:22