2015-04-27 4 views
3

У меня есть следующая структура внутри моего проекта Xcode в навигаторе ресурсов, который я хочу отразить внутри своего приложения.Упорядочить файлы в проекте Xcode и получить список программ программно

enter image description here

А именно, я хочу «сканирование» в папке «Книги» и получить NSArray всех папок в нем. Следующим шагом я хочу получить NSArray всех файлов в каждой папке.

До сих пор я пытался использовать что-нибудь, что связано с NSBundle, чтобы получить список папок, но это дает мне неправильные результаты:

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

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

Оба этих метода не отражают реальную папку структура программно.

Есть ли способ, которым мы можем это сделать?

+3

Желтые (группа) папки в Xcode проекте не имеют никакого отношения к тому, как файлы будут сохранены в пакете ресурсов приложения. Все они попадают в корень пакета приложений. – rmaddy

+0

@rmaddy, если мы добавим их как _folder references_, тогда как мы можем программно получить доступ к структуре и файлам? – Alex

+0

Если папки имеют синий цвет (ссылки на папки) в Xcode, тогда папки появятся внутри пакета приложений. Просто используйте 'NSFileManager', чтобы перечислить его содержимое. – rmaddy

ответ

4

Как отметил @rmaddy, на самом деле у вас должны быть синие папки в вашем проекте Xcode, а затем используйте 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); 
    } 
} 
Смежные вопросы