2013-07-19 2 views
0

У меня есть папка с именем «2» в каталоге документа. Теперь в папке «2» у меня есть пять изображений с именами 0.png, 1.png, 2.png, 3.png и 4.png. Я хочу получить эти изображения и сохранить их в массив. У меня есть код, но он возвращает только одно изображение.Извлечение нескольких изображений из каталога документов

int b=2; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
NSLog(@"%@",paths); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d/0.png",b]]; 
UIImage *img = [UIImage imageWithContentsOfFile:getImagePath]; 
NSLog(@"%@",getImagePath); 
imge.image=img; 
+0

Кстати, в общем, следует проявлять осторожность при загрузке массивов с изображениями, поскольку изображения часто потребляют много памяти. Если у вас есть только несколько, или если у вас есть убедительное деловое дело, чтобы загрузить их в массив, все в порядке. Но девять раз из десяти лучше загружать массив имен изображений, а пользовательский интерфейс загружает изображения по мере необходимости, а не загружать их все заранее. – Rob

ответ

1

Просто используйте NSFileManager, что-то вроде этого:

[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error]; 

Это даст вам массив со всеми файловыми путями для всех файлов в указанном пути.


Так вы загружаете изображения из массива URL-адресов.

NSArray *paths = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error]; 
for (NSURL *url in paths) 
{ 
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]]; 
} 
+0

Таким образом, значение в массиве будет (0,1,2,3,4). Нам все еще нужно создавать URL-адреса, а затем получать от них изображения. – CalZone

+0

Вам не нужно создавать URL-адреса. Этот метод уже возвращает URL-адреса файлов, содержащихся в папке. Поэтому вам просто нужно загрузить изображение. Я обновляю ответ с кодом, как загрузить изображения. –

1

Вы должны прокручивать изображения.

int b=2; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
NSLog(@"%@",paths); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSMutableArray *images = [NSMutableArray arrayWithCapacity:5]; 

for (int i = 0; i < 5; i++) 
{ 
    NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:[NSString  stringWithFormat:@"%d/%d.png",b, i]]; 
    UIImage *img = [UIImage imageWithContentsOfFile:getImagePath]; 
    [images addObject:img]; 
    NSLog(@"%@",getImagePath); 
    imge.image=img; 
} 

Вместо жесткого кодирования количества и имен файлов изображений, а Dominik предложил вам следует использовать contentsOfDirectoryAtPath: ошибка: чтобы получить список файлов в этом каталоге.

NSError *error = nil; 
NSArray *imageFileNames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d",b]] error:&error]; 
+0

Недостатком этого является то, что вам нужно жестко закодировать количество изображений в каталоге, но если он будет использовать метод 'contentOfDirectoryAtPath: error:' 'NSFileManager', он может получить оба пути файлов, а также счет. –

+0

Вы правы. я отредактирую свой ответ. –

Смежные вопросы