组织Xcode项目中的文件并以编程方式获取文件夹列表

时间:2015-04-27 17:25:10

标签: ios xcode cocoa-touch nsbundle

我在资源导航器中的Xcode项目中有以下结构,我希望在我的应用程序中反映出来。

enter image description here

即,我想在“Books”文件夹中“扫描”并获取其中所有文件夹的NSArray。下一步是我想获得每个文件夹中所有文件的NSArray

到目前为止,我已尝试使用与NSBundle相关联的任何内容来获取文件夹列表,但这会给我错误的结果:

NSLog(@"bundle path is %@", [[NSBundle mainBundle] bundlePath]);

NSLog(@"resource path is %@", [[NSBundle mainBundle] resourcePath]);

这两种方法都不能以编程方式反映实际的文件夹结构。

我们有什么方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:4)

正如@rmaddy所说,你应该在Xcode项目中实际拥有 blue 文件夹,然后使用NSDirectoryEnumerator获取所有文件夹的完整列表。

以下是我如何解决这个问题:

NSURL *bundleURL = [[[NSBundle mainBundle] bundleURL] URLByAppendingPathComponent:@"Books" isDirectory:YES];

NSDirectoryEnumerator *dirEnumerator = [[NSFileManager defaultManager] enumeratorAtURL:bundleURL includingPropertiesForKeys:[NSArray arrayWithObjects:NSURLNameKey, NSURLIsDirectoryKey,nil] options:NSDirectoryEnumerationSkipsSubdirectoryDescendants  errorHandler:nil];

for (NSURL *theURL in dirEnumerator){

    // Retrieve the file name. From NSURLNameKey, cached during the enumeration.
    NSString *folderName;
    [theURL getResourceValue:&folderName forKey:NSURLNameKey error:NULL];

    // Retrieve whether a directory. From NSURLIsDirectoryKey cached during the enumeration.

    NSNumber *isDirectory;
    [theURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:NULL];

    if([isDirectory boolValue] == YES){
        NSLog(@"Name of dir is %@", folderName);
    }
}