Запустите NSBundle из папки документов

Можно ли использовать NSBundle из папки документов в iOS?

Ответ 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;
}

Это проверит наличие указанного файла в каталоге документа и скопирует файл из вашего пакета, если он еще не существует.