Sqlite БД записи не обновляются в vie когда обновляются из внешнего источника? - PullRequest
0 голосов
/ 15 сентября 2011

Я работаю над приложением, которое будет извлекать данные из базы данных SQLite локально.Приложение запускает файл, но в процессе тестирования я добавляю больше записей и тому подобное, но по какой-то причине и симулятор, и устройство видят только последнюю копию.

Я выполнил сборку CLEAN, удалил .DBиз проекта, а затем добавил его обратно, но безрезультатно.Если в БД есть 5 записей, я обновляю / добавляю еще две записи, эти новые записи не отображаются.

Единственный способ, которым я могу их увидеть, - это удалить .DB из проекта, переименоватьDB к другому имени, затем добавьте обратно.

Я знаю, это звучит как некий тип проблем с кешем, но я не могу понять, как его устранить.Как я уже упоминал, делает то же самое для симулятора и устройства.

Любая помощь очень ценится.Заранее спасибо.

Гео ...

Ответы [ 3 ]

0 голосов
/ 15 сентября 2011

Является ли файл базы данных частью вашего пакета приложений?Вы не можете изменить свой пакет приложений.Скопируйте базу данных в место, где вы можете ее изменить, например, в каталог Documents, или просто создайте его там во время выполнения при первом запуске.

0 голосов
/ 15 сентября 2011

Если у вас есть файл 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;    
}

Надеюсь, это поможет

0 голосов
/ 15 сентября 2011

Звучит как хитрый для отладки. Могу ли я спросить, как вы подключаетесь к базе данных? Используете ли вы CoreData или необработанные операторы SQL?

Мне было очень трудно понять, как базы данных работают с CoreData, поэтому я могу помочь.

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