4

我有一堆已经编写的代码,目前依赖于与我的应用程序一起分发的图像。我想改变这一点,以便可以从网站上即时下载图像,以防止不断上传/获得批准/发布新版本。

代码到处都有[UIImage imageNamed:@"MyImageName.jpg"]类型引用。我已经确定了一段可以愉快地下载这些图像的代码,这样如果我能把它们放在正确的位置,我的应用程序就可以正常工作,只要有网络连接,就可以即时下载图像。但是我不知道将下载的图像数据写入哪里,以使我预先存在的代码保持不变。

我有将相关图像数据获取到 NSData 对象的代码 - 所以只需要知道将这些数据写入哪里?

    NSLog(@"ERROR - MISSING IMAGE: %@", imageName);
    NSData* theImage = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://f6c.yourmapp.mobi/Images/%@", imageName]]];
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* documentsDirectory = [paths objectAtIndex:0];
    NSString* localFilePath = [documentsDirectory stringByAppendingPathComponent:imageName];
    [theImage writeToFile:localFilePath atomically:YES];
    tempImage = [UIImage imageNamed:imageName];
    if (tempImage != nil)
    {
        [images addObject:tempImage];
        haveAddedImages = YES;
    }

谢谢

4

3 回答 3

6

它从应用程序包中加载图像。您不能在运行时写入此文件夹。而是将您的图像写入 Documents 文件夹(您可以使用 获取路径NSDocumentDirectory)并用于[UIImage imageWithContentsOfFile:]加载此类图像。

于 2012-04-16T12:33:21.387 回答
1

您只能将图像写入应用程序的文档文件夹。

- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

但是代码 [UIImage imageNamed:@"MyImageName.jpg"] 从您的应用程序包中加载图像,您无法向其中写入数据。

因此,您可以将图像下载并保存到上述文档文件夹中,并在需要时使用图像名称并重新创建路径。

使用 + (UIImage *)imageWithContentsOfFile:(NSString *)path 代替从路径加载。

于 2012-04-16T12:33:43.600 回答
0

您可以将图像下载到文档目录中。然后从文档目录加载图像

这里有一些链接可以帮助您实现这一目标。

http://www.iphonedevsdk.com/forum/iphone-sdk-development/79393-how-download-files-server.html

http://www.cocos2d-iphone.org/forum/topic/16121

Iphone:如何在图像视图中显示文档目录图像?

于 2012-04-16T12:34:36.037 回答