Доступ к изображениям из 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"];