从nsbundle访问图像

时间:2013-05-22 15:14:30

标签: ios uiimageview nsbundle

我有一个试图从捆绑中访问xib和图像的框架。我能够很好地访问xib但无法在UIImageView中加载图像。我甚至检查文件是否存在,控制台输出是否是......

知道如何加载图片吗?

在框架视图控制器文件中加载xib的代码

self = [super initWithNibName:@"ViewController_iPad" bundle:[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"MyBundle" ofType:@"bundle"]]];

加载图片的代码

- (void) loadImage
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"MyBundle.bundle/test" ofType:@"png"];
    BOOL present = NO;
    present = [[NSFileManager defaultManager] fileExistsAtPath:path];
    if (present)
    {
        NSLog(@"MyBundle.bundle/test exists");
    }
    else
    {
        NSLog(@"MyBundle.bundle/test does not exists");

    }

    self.testImageView.image = [UIImage imageNamed:path];

    self.testImageView2.image = [UIImage imageWithContentsOfFile:path];
}
  

MyTestHarnessApp [11671:c07]存在MyBundle.bundle / test

5 个答案:

答案 0 :(得分:4)

当您使用imageNamed:时,您必须只传递一个简单的文件名,并且图片必须存在于应用程序资源包的根目录中。

您的图片不在资源包的根目录中,它位于子文件夹中。

由于您已在path变量中获取了图片的完整路径,因此您必须使用UIImage imageWithContentsOfFile:方法:

self.testImageView.image = [UIImage imageWithContentsOfFile:path];

答案 1 :(得分:2)

如果+[UIImage imageNamed:]未正确解析路径,您可以始终使用:

self.testImageView.image = [UIImage imageWithContentsOfFile: path];

答案 2 :(得分:1)

您可以使用以下内容:

self.testImageView.image = [UIImage imageNamed:@"MyBundle.bundle/test.png"];

但似乎如果你也把XIB放在捆绑中,那么界面将相对于捆绑包。

self.testImageView.image = [UIImage imageNamed:@"test.png"]

答案 3 :(得分:1)

尝试一步一步。

首先获取主包中的包的路径:

NSString *myBundlePath=[[NSBundle mainBundle] pathForResource:MyBundle ofType:@"bundle"];

检查捆绑包中是否有任何内容。这更适合双重检查。一旦它工作,您可以选择省略此代码。但仔细检查事物总是一个好主意。

 NSBundle *imageBundle=[NSBundle bundleWithPath: myBundlePath];
 NSArray *allImageURLs=[imageBundle URLsForResourcesWithExtension:@"png" subdirectory:nil];
 NSLog(@"imageURLS:  %@",allImageURLS);

由于您已经拥有捆绑路径,因此请将映像名称添加到路径中。或者您可以从上面代码中已有的网址列表中提取它。

NSString *myImagePath=[myBundlePath stringByAppendingPathComponent:@"test.png"];
NSLog(@"myImagePath=%@",myImagePath);

然后,由于您有完整路径,请加载图像

UIImage *testImage = [UIImage imageWithContentsOfFile:backgroundImagePath];

从发货应用中获取的代码。

祝你好运

答案 4 :(得分:0)

如果图像已经在主要包中,只需使用图像名称:test.png或只是测试

[UIImage imageNamed:@"test.png"];
[UIImage imageNamed:@"test"];