Доступ к изображениям из nsbundle

У меня есть фреймворк, который пытается получить доступ к XIB и изображениям из пакета. Я могу получить доступ к XIB нормально, но не могу загрузить изображения в UIImageView. Я даже проверяю, существует ли файл, и вывод консоли - да...

Есть идеи, как загрузить изображение?

Код для загрузки xib в файле viewcontroller фреймворка

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 ответов

Когда вы используете imageNamed: Вы должны передать только простое имя файла, и изображение должно существовать в корне пакета ресурсов приложения.

Ваше изображение не находится в корне пакета ресурсов, оно находится в подпапке.

Так как вы получили полный путь изображения в path переменная, вы должны использовать UIImage imageWithContentsOfFile: метод:

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

Если +[UIImage imageNamed:] не разрешает путь правильно, вы всегда можете использовать:

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

Вы можете просто использовать следующее:

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

Но кажется, что если вы поместите XIB в пакет, интерфейс будет относительно пакета.

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

Попробуйте идти шаг за шагом.

Сначала получите путь к комплекту внутри вашего основного комплекта:

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

Проверьте, есть ли что-нибудь в комплекте. Это больше для двойной проверки. Когда он заработает, вы можете пропустить этот код. Но это всегда хорошая идея, чтобы дважды проверить вещи.

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

Поскольку у вас уже есть путь к пакету, добавьте к нему имя изображения. Или вы можете просто извлечь его из списка URL-адресов, которые у вас уже есть в приведенном выше коде.

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

Затем, поскольку у вас есть полный путь, загрузите изображение

UIImage *testImage = [UIImage imageWithContentsOfFile:backgroundImagePath];

Код взят из приложения доставки.

Удачи

Тим

Если изображения уже находятся в основном пакете, просто используйте имя изображения: test.png или просто test

[UIImage imageNamed:@"test.png"];
[UIImage imageNamed:@"test"];
Другие вопросы по тегам