关于iphone:图片放入数组 ios开发

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)
{
    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,因此您会保留文件名数组,但将图像的加载推迟到您真正需要它们时。

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

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

    enter

    enterdb_images"文件夹旁边的蓝色图标)。但是,如果您选择了"为添加的文件夹创建组",则会在您的"Images"组旁边出现典型的黄色图标。最重要的是,在这种情况下,您要在子目录 "Images" 中查找图像,您希望使用 "为添加的文件夹创建文件夹引用" 选项,并在图片。

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


    试试这个:

    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 文档。


    阅读NSArrayinitWithContentsOfFile方法的文档:

    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.

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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];

    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];
        //do something with your image here.
    }

    希望有帮助


    如果我正确理解了您的问题 initWithContentsOfFile 不符合您的预期,根据文档:

    "用给定路径指定的文件内容初始化一个新分配的数组。"

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

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