从xcode中的mainBundle获取子目录

时间:2014-03-19 06:31:28

标签: ios objective-c xcode cocoa-touch

我有以下代码:

NSString *folderPath = [NSString stringWithFormat:@"%@/Objects/", [[NSBundle mainBundle] bundlePath]];
NSArray *fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:folderPath  error: nil];

for (NSString *s in fileList) {
    NSLog(s);
}

enter image description here

Objects文件夹中有100个png文件。

但是文件列表似乎是空的。我可以查看有关项目设置的内容是什么?我做的代码错了吗? fileList应该是Objects中所有图片的数组吗?

我试图获取一个数组,其中包含我拥有的所有图像的名称,以便稍后我可以为UIImage分配和成像

1 个答案:

答案 0 :(得分:11)

“对象”文件夹的黄色文件夹图标表示您将图像文件夹拖到Xcode项目上时创建了文件夹组而不是文件夹参考(具有蓝色文件夹图标)。 在“复制捆绑资源”构建阶段,Xcode将文件夹组中的文件复制到应用程序包的根目录中 如果您想在应用程序包中使用名为“Objects”的子目录,则必须在将“Objects”拖动到Xcode窗口后选择“为任何添加的文件夹创建文件夹引用”。

您的项目侧栏应显示“Objects”文件夹,如下所示:
enter image description here

要从该复制的文件夹中获取所有.png的列表,您可以使用以下代码:

NSURL* resourceURL = [[NSBundle mainBundle] resourceURL];
resourceURL = [resourceURL URLByAppendingPathComponent:@"Objects"];
NSError* error = nil;
NSArray* resourceURLContents = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:resourceURL includingPropertiesForKeys:nil options:0 error:&error];
resourceURLContents = [resourceURLContents filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSURL* evaluatedObject, NSDictionary *bindings) {
    return [[evaluatedObject pathExtension] isEqualToString:@"png"];
}]];
NSLog(@"Contents:%@", resourceURLContents);