Как мне указать путь для базы данных sqlite в проекте iPhone? - PullRequest
5 голосов
/ 18 февраля 2011

После добавления его в качестве ресурса сам файл базы данных находится в корне проекта.

Мне удалось открыть его, указав полный путь так, как его видит OS X, т. Е. "/ Users / Louis / Documents / Test Project / test.db".

Но, конечно, на iPhone такого пути нет.

Я думаю, что я должен определить путь как "application root / test.db", но я не знаю, как, или если это вообще сработает где-нибудь еще, кроме моей машины для разработки.

Спасибо за любые идеи.

Ответы [ 3 ]

9 голосов
/ 18 февраля 2011

Чтобы получить путь к файлу, который вы добавили в XCode, вы должны использовать pathForResource: ofType: с вашим mainBundle.

NSString *path = [[NSBundle mainBundle] pathForResource:@"yourDb" ofType:@"sqlite"];

Но вы не можете изменять файлы в mainBundle.Таким образом, вы должны скопировать его в другое место.Например, в библиотеку вашего приложения.

Вы можете сделать это так:

NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
NSString *targetPath = [libraryPath stringByAppendingPathComponent:@"yourDB.sqlite"];

if (![[NSFileManager defaultManager] fileExistsAtPath:targetPath]) {
    // database doesn't exist in your library path... copy it from the bundle
    NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"yourDb" ofType:@"sqlite"];
    NSError *error = nil;

    if (![[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:targetPath error:&error]) {
        NSLog(@"Error: %@", error);
    }
}
2 голосов
/ 18 февраля 2011

Не просто используйте SQLite API, используйте эту удивительную оболочку под названием FMDB: https://github.com/ccgus/fmdb

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