Подтвердить что ты не робот

Получение ссылок/путей файла связки при запуске приложения

Предположим, что у меня есть произвольный набор файлов, включенных в основной пакет приложений. Я хотел бы получить URL-адреса файлов для тех, кто находится в запуске, и хранить их где-нибудь. Возможно ли это с помощью NSFileManager? Документация неясна в этом отношении.

Примечание. Мне нужны только URL-адреса файлов, мне не нужно обращаться к фактическим файлам.

4b9b3361

Ответ 1

Вы можете получить URL-адрес файла в основном комплекте, используя

NSString *path = [[NSBundle mainBundle] pathForResource:@"SomeFile" ofType:@"jpeg"];
NSURL *url = [NSURL fileURLWithPath:path];

Вы можете написать этот URL-адрес, например, в файл списка свойств в каталоге Documents:

NSString *docsDir = [NSSearchForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *plistPath = [docsDir stringByAppendingPathComponent:@"Files.plist"];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[url absoluteString] forKey:@"SomeFile.jpeg"];
[dict writeToFile:plistPath atomically:YES];

Если вы не знаете имена файлов и хотите просто указать все файлы в комплекте, используйте

NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[NSBundle mainBundle] bundlePath] error:NULL];
for (NSString *fileName in files) {
    NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil];
    NSURL *url = [NSURL fileURLWithPath:path];
    // do something with `url`
}

Ответ 2

Да, вы получите свой путь:

NSString *path = [NSBundle mainBundle] pathForResource:@"file1" ofType:@"png"];
NSURL *fileURL = [NSURL fileURLWithPath:path]

// save it as any other object or in a dictionary:

[myMutableDictionary setObject:fileURL forKey:@"file1.png"];

EDIT: чтобы получить полный список файлов, используйте NSFileManager, получите путь к самому набору, затем пройдите каждый каталог, получая файлы, создавая URL-адреса и сохраняя их где-нибудь. Есть куча кода на SO, как ходить по каталогу, чтобы сделать это. [Вы должны уточнить свой вопрос, чтобы быть более конкретным в отношении того, что вы хотите, это не было ясно изначально]

Ответ 3

Там есть API на NSBundle (documentation), доступный на 10.6 или iOS 4, чтобы получить NSURL напрямую, а не передача пути к конструктору NSURL:

- (NSURL *)URLForResource:(NSString *)name withExtension:(NSString *)ext;

Он также имеет варианты, которые принимают subdirectory и localizationName, такие же, как и его эквиваленты -pathForResource:.