Pictures put into a array Ios developing
我的项目中有一个包含图片的文件夹,我想知道如何将这些图片从文件夹中放入数组中
我该怎么做呢?
我尝试将图像放入数组中
1
2 |
UIImage*image = [[NSBundle mainBundle]pathsForResourcesOfType:@"jpg" @"jpeg" @"gif" inDirectory:@"Images"];
NSArray*images = [[NSMutableArray alloc]initWithContentsOfFile:image]; |
您可以执行以下操作,获取文件名数组,然后用图像本身填充另一个数组(假设您正在尝试这样做)。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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) // load the images array for (NSString *imagePath in imagePaths) |
顺便说一句,除非这些是很小的缩略图并且您只有很少的图像,否则通常不建议像这样一次加载所有图像。通常,由于图像会占用大量 RAM,因此您会保留文件名数组,但将图像的加载推迟到您真正需要它们时。
如果您没有成功检索图像,有两个问题:
这些文件是否包含在我的捆绑包中?当您为 Target 的设置选择”构建阶段”并展开”复制捆绑资源”(见下图)时,您看到包含的图像了吗?如果您没有在此列表中看到您的图像,则它们不会在您构建应用程序时包含在应用程序中。要添加您的图像,请单击””并将它们添加到此列表中。
文件是在”组”中还是在实际的子目录中?将文件添加到项目时,您将看到以下对话框:
如果您选择了”为添加的文件夹创建文件夹引用”,那么该文件夹将在您的项目中显示为蓝色(请参阅前面屏幕快照中我的”
最重要的是,您需要确保图像在您的应用程序包中,并且它们在您认为的位置。另请注意,iOS 区分大小写(尽管模拟器不区分),因此请确保您的 “
试试这个:
1
2 3 4 5 6 7 8 9 10 11 |
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 文档。
阅读
The array representation in the file identified by aPath must contain only property list objects (NSString, NSData, NSArray, or NSDictionary objects). The objects contained by this array are immutable, even if the array is mutable.
在您的情况下,您需要使用
1
2 3 4 5 6 7 8 9 10 11 12 |
NSFileManager *localFileManager=[[NSFileManager alloc] init]; NSDirectoryEnumerator *dirEnum = [localFileManager enumeratorAtPath:docsDir]; NSString *file; |
1 | [[NSBundle mainBundle]pathsForResourcesOfType:@"jpg" @"jpeg" @"gif" inDirectory:@"Images"]; |
已经返回这些对象的数组。将您的行更改为:
1
|
NSArray *images = [[NSBundle mainBundle]pathsForResourcesOfType:@"jpg" @"jpeg" @"gif" inDirectory:@"Images"];
|
请注意,此数组将仅保存所有图像的路径。为了制作它们的图像,您需要调用
1
2 3 4 5 |
for(NSString* imagePath in images) {
UIImage* anImage = [[UIImage alloc] initWithContentsOfFile:imagePath]; |
希望有帮助
如果我正确理解了您的问题 initWithContentsOfFile 不符合您的预期,根据文档:
“用给定路径指定的文件内容初始化一个新分配的数组。”
另外,pathsForResourceOfType 已经在创建一个数组,而不是 UIImage,你可以简单地这样做:
1
|
NSArray* images = [[NSBundle mainBundle]pathsForResourcesOfType:@"jpg" @"jpeg" @"gif" inDirectory:@"Images"];
|
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/268664.html