Если у вас есть файл db в ваших ресурсах, вам нужно скопировать его из ресурсов в библиотеку или документ при запуске, а затем подключиться к файлу в документах или библиотеке.
Подсказка: выйдите из пути, к которому вы подключаетесь, откройте его в терминале (он будет находиться в разделе «Производные данные»), а затем подключитесь и выполните запрос с помощью строки sqlite3 cmd (поиск). Это помогает вам быть уверенным в том, что вы работаете с нужной базой данных, и вы можете проверять свои данные на ходу.
Как примечание, смотрите этот пост (у меня есть библиотека, которая обрабатывает все это, если вам интересно):
Не хотите заменять старую базу данных при обновлении приложения
Вот пример из примера приложения, в котором я вызываю sureOpened (который обрабатывает копию из ресурса и регистрирует то, что я использую):
- (BOOL)ensureDatabaseOpen: (NSError **)error
{
// already created db connection
if (_contactDb != nil)
{
return YES;
}
NSLog(@">> ContactManager::ensureDatabaseOpen");
if (![self ensureDatabasePrepared:error])
{
return NO;
}
const char *dbpath = [_dbPath UTF8String];
if (sqlite3_open(dbpath, &_contactDb) != SQLITE_OK &&
error != nil)
{
*error = [[[NSError alloc] initWithDomain:@"ContactsManager" code:1000 userInfo:nil] autorelease];
return NO;
}
NSLog(@"opened");
return YES;
}
- (BOOL)ensureDatabasePrepared: (NSError **)error
{
// already prepared
if ((_dbPath != nil) &&
([[NSFileManager defaultManager] fileExistsAtPath:_dbPath]))
{
return YES;
}
// db in main bundle - cant edit. copy to library if !exist
NSString *dbTemplatePath = [[NSBundle mainBundle] pathForResource:@"contacts" ofType:@"db"];
NSLog(@"%@", dbTemplatePath);
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
_dbPath = [libraryPath stringByAppendingPathComponent:@"contacts.db"];
NSLog(@"dbPath: %@", _dbPath);
// copy db from template to library
if (![[NSFileManager defaultManager] fileExistsAtPath:_dbPath])
{
NSLog(@"db not exists");
NSError *error = nil;
if (![[NSFileManager defaultManager] copyItemAtPath:dbTemplatePath toPath:_dbPath error:&error])
{
return NO;
}
NSLog(@"copied");
}
return YES;
}
Надеюсь, это поможет