Преимущества метода checkAndCreateDatabase перед прямой ссылкой mainBundle - PullRequest
1 голос
/ 15 ноября 2011

Я изучаю Objective-C, поэтому, пожалуйста, будьте милы.: -)

Изучая, как соединить Objective-C и базу данных SQLite, я обнаружил, что некоторые авторы предлагают использовать этот (или очень похожий) метод перед началом запроса к базе данных:

-(void) checkAndCreateDatabase{

    BOOL success;

    NSFileManager *fileManager = [NSFileManager defaultManager];

    success = [fileManager fileExistsAtPath:databasePath];

    if(success) return;

    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];

    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];

    [fileManager release];
}

Что является основным преимуществом использования этого кода перед использованием NSString *dbPath = [[NSBundle mainBundle] pathForResource:@"myDb" ofType:@"sqlite"]?

1 Ответ

2 голосов
/ 15 ноября 2011

В iOS нельзя писать в пакет приложений, поэтому база данных обычно копируется в область изолированной программной среды приложений.

Следующий код подходит для получения пути к вашей базе данных в комплекте приложений:

NSString *dbPath = [[NSBundle mainBundle] pathForResource:@"myDb" ofType:@"sqlite"];

Путь к каталогу документов можно найти с помощью этого кода:

NSArray  *documentDirList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDir  = [documentDirList objectAtIndex:0];

Существует несколько других каталогов, которые вы можете искать, поиск по перечислению: NSSearchPathDirectory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...