2013-09-02 2 views
3

Я провел много исследований, чтобы найти разницу между работой приведенных ниже кодов. Как я пытаюсь получить изображение из каталога документов, которое может быть задано с помощью PATH с использованием NSBundle и показать его в ImageView.Как получить изображение из указанного каталога PATH или документа с помощью NSBundle

ТИП 1: Этот код работает отлично и в состоянии восстановить изображение и дисплей:

NSString *inputPath= @"/Users/abc/Library/Application Support/iPhone Simulator/6.0/Applications/ADD46F96-333A-46BF-8291-FABD1BD7C389/Documents/colour.png"; 
NSString *jjj=[inputPath pathExtension]; 
NSString *hhhhh=[[inputPath lastPathComponent]stringByDeletingPathExtension]; 
NSString *bivivik=[inputPath stringByDeletingLastPathComponent]; 
NSString *imagePATH=[NSBundle pathForResource:hhhhh ofType:jjj inDirectory:bivivik]; 
theImage=[UIImage imageWithContentsOfFile:imagePATH]; 
mImageDisplayView.image=theImage; 

ТИП 2: Но если я стараюсь, как показано ниже код .Не извлечения изображения и показывать нулевое значение

NSString* imagepath = [[NSBundle bundleWithPath:@"/Users/abc/Library/Application Support/iPhone Simulator/6.0/Applications/ADD46F96-333A-46BF-8291-FABD1BD7C389/Documents/colour.png"]bundlePath]; 
theImage=[UIImage imageWithContentsOfFile:imagepath]; 
mImageDisplayView.image=theImage; 

Что такое случилось с моим кодом TYPE 2 .а есть ли другой способ, который я могу извлечь изображение как им пытаются в TYPE 2 метод .please помогают мне

ответ

4

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

Использование [NSBundle mainBundle] для чтения файлов из пакета приложения,

[[NSBundle mainBundle] pathForResource:@"imageName" ofType:@"png"]; 

Для чтения файла из каталога документов вашего приложения использовать этот фрагмент кода,

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Myfile.png"]; 
UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath]; 

EDIT

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

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *bundlePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"MyBundle.bundle"]; 
NSBundle *myBundle = [NSBundle bundleWithPath:bundlePath]; 
NSString* imagePath = [myBundle pathForResource:@"MyImage" ofType:@"png"]; 
UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath]; 

Надеюсь, что это поможет!

+0

ваш ответ принят. Что делать, если мне нужно получить доступ к изображению с помощью NSBundle. cau i use filePath как это ** NSString * imagepath = [[NSBundle bundleWithPath: filePath] bundlePath]; ** Будет ли это работать? – lreddy

+0

@lokesh Игнорировать мой предыдущий комментарий. Вышеупомянутый API не используется для получения файла в комплекте приложений. Он используется для получения пути к файлу .bundle. – Amar

+0

Вы читаете файлы изображений из отдельного пакета, кроме 'mainBundle'? – Amar