无法使用imageNamed方法获取UIImage对象

时间:2009-01-20 13:51:35

标签: iphone

我想从指定的路径位置从IImage对象获取图像。这是代码。

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  
                                                         NSUserDomainMask,   YES);

NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writablePath = [documentsDirectory stringByAppendingPathComponent:@"image1.png"];
NSLog(writablePath);
UIImage *image=[UIImage imageNamed:writablePath];

我得到的图像对象为零。那可能是什么问题呢? 我还改变了image1.Path上的image1.png。

3 个答案:

答案 0 :(得分:7)

我相信UIImage imageNamed会从应用程序包中查找图像,而不是通过完整路径查找图像。您可以使用UIImage imageWithContentsOfFile从完整路径加载(但不会被缓存),或者只是将图像放入捆绑包中并使用imageNamed。

您还需要检查文件是否实际放在应用程序包中,而不仅仅是放在项目目录中。

答案 1 :(得分:0)

你的问题的确切答案是你得到的是因为你正在使用imageNamed:它使用给定(路径)名称​​ relative 查找图像到束根(即。已部署的应用程序中的app目录),而您正在为其提供文档目录的绝对路径。

您实际上可以使用imageNamed从捆绑包的子目录中加载图像。 这需要两件事:

  1. 您的图像实际上位于已部署的包中的子目录中,而不仅仅是XCode项目中的子目录或组 - 因为它们会折叠到根目录中。 换句话说,您需要在XCode(文件夹引用)中使用“蓝色组”。

  2. 您在imageNamed中使用相对路径。

  3. 所以[UIImageView imageNamed:@“subdir / foo”]将加载foo.png或foo@2x.png,其中这些文件出现在XCode中名为“subdir”的“蓝色”组中。

    您可以使用它来在文档的子目录中找到图像,因为您知道相对于您的文件夹创建文档的位置,但这有点hacky。要从文档加载图像,您应该使用imageWithContentsOfFile:而不是imageNamed:

    我厌倦了寻找这种事情的答案并做了一些测试,详细说明了这个以及其他结果(带图片!)来回答这个问题:

    UIImage imageNamed requires pathForResource?

答案 2 :(得分:0)

我想用这个:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  
                                                         NSUserDomainMask,   YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writablePath = [documentsDirectory stringByAppendingPathComponent:@"image1.png"];
NSLog(writablePath);

===而不是上面写这个===

<强> UIImage *image=[UIImage imageWithContentsOfFile:writablePath];