Получение ссылок/путей файла связки при запуске приложения
Предположим, что у меня есть произвольный набор файлов, включенных в основной пакет приложений. Я хотел бы получить URL-адреса файлов для тех, кто находится в запуске, и хранить их где-нибудь. Возможно ли это с помощью NSFileManager
? Документация неясна в этом отношении.
Примечание. Мне нужны только URL-адреса файлов, мне не нужно обращаться к фактическим файлам.
Ответы
Ответ 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:
.