4

我正在使用 Xcode 制作 iPhone 应用程序,以下是目录结构

GFGGAME
  -gfggame.xcodeproj
  -Images
    --bagold
     ---bags_1.png
     ---bags_2.png
    --bagsnew
     ---bags_5.png
     ---bags_6.png

我想访问文件夹bagsoldbagsnew. 如果我对 png 使用资源路径和谓词过滤器,它会给我所有 png 文件。有没有办法我可以只访问文件夹中存在的文件。

4

4 回答 4

3

从您对其他已回答的人的回复来看,在我看来,您将文件夹与 Xcode 组混淆了。Xcode 组与设备上的文件夹不对应。它们只是为了帮助您组织您的 Xcode 项目而不是设备。任何资源都直接复制到具有平面层次结构的主目录包中。

当您将文件夹拖入 Xcode 以将其添加到项目中时,您需要选择“为任何添加的文件夹创建文件夹引用”不是 “为任何添加的文件夹创建组”。这将在构建应用程序时保留目录布局。

于 2012-09-10T07:35:24.760 回答
3

我想你可能想使用这种NSBundle方法:

+ (NSArray *)pathsForResourcesOfType:(NSString *)extension inDirectory:(NSString *)bundlePath

在此处查看 API 文档

您将@".png"作为扩展名传递,然后为您想要的子目录指定目录路径(您可能需要调用两次,每个子目录调用一次,然后只需将第二个路径数组附加到第一个)。

在此处查看有关 Stack Overflow 的类似问题

请注意上面答案(链接)中的要点,即您需要在 Xcode 中做什么才能使其工作。

于 2012-09-10T06:46:45.110 回答
2

做这个:

NSString *bundleRootpath = [[NSBundle mainBundle] bundlePath];
NSString *filePath = [bundleRootpath pathForResource:@"bags_1" ofType:@"png" inDirectory:@"Images/bagold"]
NSFileManager *fileMangr = [NSFileManager defaultManager];
NSArray *dirContents = [fileMangr contentsOfDirectoryAtPath:bundleRootpath error:nil]; //your path here it may be document directory also

过滤 JPG(如果有)

NSArray *onlyJPGs;
if([dirContents count] > 0){
NSPredicate *fltrJPG = [NSPredicate predicateWithFormat:@"self ENDSWITH '.jpg'"];
onlyJPGs = [dirContents filteredArrayUsingPredicate:fltrJPG];
}

现在 PNG 如果有的话

NSArray *onlyPNGs;
if([dirContents count] > 0){
NSPredicate *fltrPNG = [NSPredicate predicateWithFormat:@"self ENDSWITH '.png'"];
onlyPNGs = [dirContents filteredArrayUsingPredicate:fltrPNG];

搜索任何其他格式(如果有)

将 onlyJPG 和 onlyPNG 合并到一个数组中

于 2012-09-10T07:06:07.637 回答
1

只是为了多样化:)

   NSMutableArray *filePaths = [NSMutableArray arrayWithArray:[NSBundle pathsForResourcesOfType:nil inDirectory:fullPathToFolder]];
    NSMutableArray *toDelete = [NSMutableArray array];
    if(filePaths.count>0){
        [filePaths enumerateObjectsUsingBlock:^(NSString* obj, NSUInteger idx, BOOL *stop) {
            if(!([obj hasSuffix:@"jpg"] || [obj hasSuffix:@"png"])){
                    [toDelete addObject:obj];
            }
        }];
    }
    [filePaths removeObjectsInArray:toDelete];
    return filePaths;
于 2014-05-29T11:40:03.033 回答