照片放入arraysIos开发

我的项目中有一个带有图片的文件夹,我想知道如何将文件夹中的图片放入数组中

我该怎么做?

我试着把图像放在数组中

UIImage*image = [[NSBundle mainBundle]pathsForResourcesOfType:@"jpg" @"jpeg" @"gif" inDirectory:@"Images"]; NSArray*images = [[NSMutableArray alloc]initWithContentsOfFile:image]; 

您可以执行以下操作,获取文件名数组,然后使用图像填充另一个数组(假设这是您尝试执行的操作)。

 NSMutableArray *imagePaths = [[NSMutableArray alloc] init]; NSMutableArray *images = [[NSMutableArray alloc] init]; NSArray *imageTypes = [NSArray arrayWithObjects:@"jpg", @"jpeg", @"gif", nil]; // load the imagePaths array for (NSString *imageType in imageTypes) { NSArray *imagesOfParticularType = [[NSBundle mainBundle]pathsForResourcesOfType:imageType inDirectory:@"Images"]; if (imagesOfParticularType) [imagePaths addObjectsFromArray:imagesOfParticularType]; } // load the images array for (NSString *imagePath in imagePaths) [images addObject:[UIImage imageWithContentsOfFile:imagePath]]; 

顺便说一句,除非这些是微小的缩略图并且你很少,所以通常不建议像这样一次加载所有图像。 通常,因为图像可能会占用大量的RAM,所以您可以保留文件名数组,但会延迟加载图像,直到您真正需要它们为止。


如果您未成功检索图像,则有两个问题:

  1. 这些文件是否包含在我的包中? 当您为目标设置选择“构建阶段”并展开“复制捆绑资源”(请参见下图)时,您是否看到包含图像? 如果您在此列表中没有看到图像,则在构建它们时它们将不会包含在应用程序中。 要添加图像,请单击“+”并将其添加到此列表中。

    在此处输入图像描述

  2. 这些文件是“组”还是实际的子目录? 将文件添加到项目时,您将看到以下对话框:

    在此处输入图像描述

    如果选择“为添加的文件夹创建文件夹引用”,则该文件夹将在项目中以蓝色显示(请参阅上一屏幕快照中“ db_images ”文件夹旁边的蓝色图标)。 但是,如果选择“为添加的文件夹创建组”,则“ Images ”组旁边会显示典型的黄色图标。 在这种情况下,您要在“ Images ”子目录中查找图像的底线,您要使用“为添加的文件夹创建文件夹参考”选项,并在图像旁边生成蓝色图标。

最重要的是,您需要确保图像在您的应用包中,并且它们是您认为的位置。 另请注意,iOS区分大小写(虽然模拟器不是),因此请确保您正确使用“ Images ”。

如果我正确地理解你的问题,那么initWithContentsOfFile根据你的文档没有做你期望的事情:

“使用给定路径指定的文件内容初始化新分配的数组。”

另外,pathsForResourceOfType已经创建了一个数组,而不是UIImage,你可以简单地做:

 NSArray* images = [[NSBundle mainBundle]pathsForResourcesOfType:@"jpg" @"jpeg" @"gif" inDirectory:@"Images"]; 
 [[NSBundle mainBundle]pathsForResourcesOfType:@"jpg" @"jpeg" @"gif" inDirectory:@"Images"]; 

已经返回这些对象的数组。 将您的行更改为:

  NSArray *images = [[NSBundle mainBundle]pathsForResourcesOfType:@"jpg" @"jpeg" @"gif" inDirectory:@"Images"]; 

请注意,此数组仅保存所有图像的路径。 为了制作它们的图像,你需要打电话

 for(NSString* imagePath in images) { UIImage* anImage = [[UIImage alloc] initWithContentsOfFile:imagePath]; //do something with your image here. } 

希望有所帮助

阅读NSArrayinitWithContentsOfFile方法的文档:

由aPath标识的文件中的数组表示必须仅包含属性列表对象(NSString,NSData,NSArray或NSDictionary对象)。 即使数组是可变的,此数组包含的对象也是不可变的。

在您的情况下,您需要使用NSFileManager枚举目录中的文件。 以下是文档中目录枚举的示例:

 NSFileManager *localFileManager=[[NSFileManager alloc] init]; NSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:docsDir]; NSString *file; while (file = [dirEnum nextObject]) { if ([[file pathExtension] isEqualToString: @"doc"]) { // Create an image object here and add it to // mutable array } } [localFileManager release]; 

尝试这个:

  NSMutableArray* paths=[NSMutableArray new]; NSFileManager* manager=[NSFileManager new]; NSBundle* bundle= [NSBundle mainBundle]; NSDirectoryEnumerator* enumerator= [manager enumeratorAtPath: [bundle bundlePath] ]; for(NSString* path in enumerator) { if([path hasSuffix: @".jpg"] || [path hasSuffix: @".jpeg"] || [path hasSuffix: @".gif"]) { [paths addObject: path]; } } 

有关解释,我建议您查看NSDirectoryEnumerator文档 。