【问题标题】:Retrieve multiple images from document directory从文档目录中检索多个图像
【发布时间】:2013-07-18 20:14:54
【问题描述】:

我在文档目录中有名为“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;

【问题讨论】:

  • 顺便说一句,通常应该对加载充满图像的数组保持警惕,因为图像通常会消耗大量内存。如果您只有几个,或者如果您有一个令人信服的商业案例将它们加载到一个数组中,那很好。但是十分之九,最好加载一组图像名称,并让 UI 根据需要加载图像,而不是提前加载所有图像。

标签: iphone ios objective-c nsdocumentdirectory


【解决方案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:error: 来获取该目录中的文件列表。

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

【讨论】:

  • 这样做的缺点是你必须硬编码目录中的图像数量,但如果他将使用NSFileManagercontentsOfDirectoryAtPath:error: 方法,他可以获得文件的两个路径和也是计数。
【解决方案2】:

只需使用 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,1,2,3,4)。我们仍然需要创建 URL,然后从中获取图像。
  • 您不需要创建 URL。此方法已返回文件夹中包含的文件的 URL。所以你只需要加载图像。我已经用如何加载图像的代码更新了答案。
猜你喜欢
  • 2023-03-03
  • 2016-10-24
  • 1970-01-01
  • 2013-06-10
  • 2018-05-13
  • 2017-10-07
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多