FMDB ios нет такой таблицы

У меня проблема с проектом sqlite, который я делаю, я использую FMDB, я следую простому примеру, но он не работает. И не могу найти ошибку. Я сделал свою схему базы данных из терминала, я поместил в нее некоторые данные. Я очень новичок в ios dev, поэтому я точно не знаю, правильно ли я выполнил шаги. Вот что я сделал:

1. Я создал схему базы данных и добавил несколько полей. 2 - я скопировал базу данных .db в папку моего проекта в xcode. 3 - я добавляю файлы FMDB. 4 - я добавляю sqlite3.dylib 5 - я помещаю этот код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.dbname = @"database.db";
    NSArray * docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * docDIr = [docPath objectAtIndex:0];
    self.dbpath = [docDIr stringByAppendingPathComponent:dbname];

    [self checkDB];

    [self getQ];

    return YES;
}
-(void) getQ
{
    FMDatabase * db = [FMDatabase databaseWithPath:dbpath];
    [db open];

    FMResultSet * result = [db executeQuery:@"SELECT * FROM table1"];

    NSLog(@"last Error: %@",[db lastErrorMessage]);
    NSLog(@"result: %@", result);
}
-(void) checkDB
{
    BOOL success;
    NSFileManager * fm = [NSFileManager defaultManager];
    success = [fm fileExistsAtPath:dbpath];
    NSError * error = [[NSError alloc] init];
    if (success) return;
    NSLog(@"result:");
    NSString * dbPathFromApp = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:self.dbname];

    [fm copyItemAtPath:dbPathFromApp toPath:dbpath error:&error];           
}

Судя по всему, база данных пуста, так что же случилось? почему я не могу найти таблицу 1? Если я открою файл с помощью любого графического интерфейса sqlite, таблица будет выглядеть нормально. Спасибо за любую помощь Консоль показывает мне следующие строки: 2013-03-02 14:03:31.839 myApp[21433:c07] последняя ошибка: нет такой таблицы: table1 2013-03-02 14:03:31.841 myApp[21433: c07] результат: (нулевой)


person Fede    schedule 02.03.2013    source источник


Ответы (2)


Пара мыслей:

  1. Я подтверждаю, что база данных добавлена ​​в ваш пакет. Перейдите к своим целевым настройкам, выберите «Фазы сборки», разверните «Копировать ресурсы пакета» и убедитесь, что ваша база данных указана там. Если нет, нажмите кнопку + и добавьте его.

    комплект

  2. Я бы перезагрузил твой симулятор. Если вы когда-либо запускали приложение и не копировали базу данных должным образом, оно создало для вас пустую базу данных в папке с документами. Сбросив свой симулятор, вы можете избавиться от любых пустых баз данных, которые могут быть там.

  3. Если он все еще не работает, я бы проверил базу данных пакетов в вашем симуляторе. Перейдите в папку симулятора (~/Library/Application Support/iPhone Simulator), найдите приложение, откройте пакет (управляя нажатием на само приложение и сказав «Показать содержимое пакета»), проверьте базу данных и убедитесь, что она есть ваш table1.

person Rob    schedule 02.03.2013
comment
Большое тебе спасибо! вот и все, шаги 1 и 2 работают отлично! Я забыл шаг, ошибка новичка :D - person Fede; 02.03.2013
comment
Ваш пункт 2 - это то, что я забыл. Я не копировал базу данных из пакета в каталог документов. - person Suragch; 20.08.2015
comment
Большое спасибо!~ Шаг № 1 был тем, что мне нужно было сделать :) - person Jeffrey Kern; 29.08.2015
comment
Кажется, в моей папке поддержки приложений нет папки iPhone Simulator. Хотя я запускаю свое приложение на симуляторе - person Xitcod13; 29.07.2016
comment
Нет, он был перемещен с 2013 года. Сейчас он находится в ~/Library/Developer/Core Simulator/Devices. К сожалению, эти папки теперь используют загадочные номера GUID (но их часто можно найти, отсортировав по дате). В любом случае, как только вы найдете подходящее устройство, перейдите в раздел data/Containers/Data/Application, чтобы найти различные песочницы для ваших приложений. - person Rob; 29.07.2016
comment
Просто проходя мимо, чтобы не искать своих детей, я поместил эту строку в свой код: ›› print (Database Created: \r\ropen ( NSString(string: db.databasePath()!).deletingLastPathComponent ) \r\r) ‹‹ Затем я могу скопировать из консоли отладчика и вставить в терминал, чтобы открыть в поисковике. - person Moose; 09.07.2017

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

Проверьте прикрепленный файл

person Mazharul Belal    schedule 08.03.2021