Можно ли использовать NSBundle
из папки документов в iOS?
Запустите NSBundle из папки документов
Ответ 1
Не уверен, что такое точный вопрос, но вот как я обращаюсь к папке локального документа моего приложения (это не папка с документами, в которой хранятся источники, которые использует ваше приложение, но та, в которой ваше приложение хранит локальные ресурсы)
например, в моем приложении я снимаю фотографии с камерой и сохраняю их в локальной папке приложения, а не в ручке камеры устройства, поэтому для получения количества изображений я делаю это, в методе viewWillAppear
используйте:
// create the route of localDocumentsFolder
NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//first use the local documents folder
NSString *docsPath = [NSString stringWithFormat:@"%@/Documents", NSHomeDirectory()];
//then use its bundle, indicating its path
NSString *bundleRoot = [[NSBundle bundleWithPath:docsPath] bundlePath];
//then get its content
NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:bundleRoot error:nil];
// this counts the total of jpg images contained in the local document folder of the app
NSArray *onlyJPGs = [dirContents filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.JPG'"]];
// in console tell me how many jpg do I have
NSLog(@"numero de fotos en total: %i", [onlyJPGs count]);
// ---------------
если вы хотите узнать, что находится в папке с документами (тот, который вы действительно можете просматривать в iOS Simulator
через ~/YourUserName/Library/Поддержка приложений /iPhone Имитатор/versioOfSimulator/Применения/appFolder/Документы)
вместо этого вы использовали бы NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
.
Надеюсь, это поможет вам, приятель!
Ответ 2
Я не совсем уверен, к чему вы клоните, но общий подход к использованию файла из вашего пакета приложений заключается в том, чтобы скопировать его в каталог документа следующим образом:
-
Проверьте (при первом запуске, запуске или по необходимости) на наличие файла в каталоге документа.
-
Если он отсутствует, скопируйте "install" версию файла из вашего пакета в каталог документа.
В терминах некоторого примерного кода у меня есть метод, который я использую для следующих целей:
- (BOOL)copyFromBundle:(NSString *)fileName {
BOOL copySucceeded = NO;
// Get our document path.
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [searchPaths objectAtIndex:0];
// Get the full path to our file.
NSString *filePath = [documentPath stringByAppendingPathComponent:fileName];
NSLog(@"copyFromBundle - checking for presence of \"%@\"...", fileName);
// Get a file manager
NSFileManager *fileManager = [NSFileManager defaultManager];
// Does the database already exist? (If not, copy it from our bundle)
if(![fileManager fileExistsAtPath:filePath]) {
// Get the bundle location
NSString *bundleDBPath = [[NSBundle mainBundle] pathForResource:fileName ofType:nil];
// Copy the DB to our document directory.
copySucceeded = [fileManager copyItemAtPath:bundleDBPath
toPath:filePath
error:nil];
if(!copySucceeded) {
NSLog(@"copyFromBundle - Unable to copy \"%@\" to document directory.", fileName);
}
else {
NSLog(@"copyFromBundle - Succesfully copied \"%@\" to document directory.", fileName);
}
}
else {
NSLog(@"copyFromBundle - \"%@\" already exists in document directory - ignoring.", fileName);
}
return copySucceeded;
}
Это проверит наличие указанного файла в каталоге документа и скопирует файл из вашего пакета, если он еще не существует.