sqlite не работает на симуляторе iPhone - PullRequest
0 голосов
/ 17 ноября 2011

У меня странная проблема. Мое приложение отлично работает на моем устройстве, но база данных sqlite не работает на симуляторе. Файл «database.sqlite» существует в той же папке, что и мои приложения, он имеет то же имя и имена столбцов также являются правильными.

Итак, я предполагаю, что что-то не так с конфигурацией, но я не знаю что. Может кто-нибудь, пожалуйста, помогите мне.

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

Одной из причин может быть то, что вы должны убедиться, что база данных скопирована из каталога приложения «Файлы поддержки» (только для чтения) в библиотеку или документы, прежде чем использовать ее. Вот функция surePrepared из моего примера, использующего sqlite, который делает именно это. В данном случае это называется contacts.db

- (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;    
}
0 голосов
/ 17 ноября 2011

Вот некоторые сообщения, которые, кажется, решают проблему: http://forums.macrumors.com/showthread.php?t=484899

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