FMDB SQLite не отображается на моем устройстве

Опять же, мне нужна чья-то помощь. Я следую приведенному ниже руководству по подключению SQLite с оболочкой FMDB:

http://www.icodeblog.com/2011/11/04/simple-sqlite-database-interaction-using-fmdb/

В приведенном выше руководстве все (создание базы данных и таблицы, вставка, удаление) выполняется программно, но в симуляторе все работает нормально, но когда я использую надстройку SQLite Manager для любой вставки в базу данных (которая была создана программно в iOS) , он не отображается на моем тестовом устройстве. Есть ли что-то, чего мне не хватает (например, копирование файла в пакет) на моей стороне? Это действительно сводит меня с ума. Я совершенно новичок в этом .. Кто-нибудь может мне с этим помочь?

PS: Я знаю, что могу использовать Core Data, но по определенным причинам мне приходится жить с SQLite для этого приложения. Любая помощь будет принята с благодарностью.

Заранее спасибо.


person GenieWanted    schedule 31.07.2012    source источник
comment
Это очень странно, потому что здесь нет никаких хитростей. Если он работает на симуляторе, он обычно работает на устройстве. Можете ли вы предоставить дополнительную информацию о том, откуда вы знаете, что он не создается на устройстве, возможно, покажите код, в котором вы открываете базу данных и т. Д.?   -  person Rob    schedule 01.08.2012


Ответы (1)


Обязательно (а) включите базу данных в пакет (см. здесь для снимка экрана, на котором можно найти" ресурсы пакета копирования "); и (b) программно скопировать db из пакета в документы. Затем вы можете открыть его оттуда.

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

Обновление:

Я бы посоветовал проверить различные коды возврата и убедиться, что все в порядке.

Я взял ваш образец кода и (а) проверил результат создания FMDatabase; (б) проверил результат open; (c) проверил результат FMResultSet, включая отображение сообщения об ошибке sqlite; и (d) закрыл набор результатов:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSString *path = [docsPath stringByAppendingPathComponent:@"DADatabase.sqlite"];

FMDatabase *database = [FMDatabase databaseWithPath:path];
NSAssert(database, @"Unable to create FMDatabase object");

NSLog(@"%@", database);

BOOL success = [database open];
NSAssert(success, @"Unable to open database");

FMResultSet *results = [database executeQuery:@"SELECT * FROM DrugList"];
NSAssert(results, @"Unable to create result set: %@", [database lastErrorMessage]);

while([results next]) {
    NSString *name = [results stringForColumn:@"Drugname"];
    [arrayToLoadDiseases addObject:name];
}

[results close]; 

[database close];

Если вы запускаете это в своем симуляторе, вы можете продолжить и проверить пакет симулятора и папки с документами, если что-то пойдет не так, просто чтобы убедиться, что все там, где должно быть. Папка вашего симулятора выглядит примерно так: «~ / Library / Application Support / iPhone Simulator / 5.1 / Applications /» (замените 5.1 любой версией вашего симулятора, которую вы используете). Возможно, вам придется отобразить вашу Library папку, если вы еще этого не сделали, запустив chflags nohidden ~/Library в Terminal окне командной строки. В любом случае вы можете открыть базу данных симулятора с помощью команды sqlite3 в Mac OS X и убедиться, что ваша таблица в порядке.

Распространенной ошибкой является невозможность программного копирования базу данных правильно, поэтому метод open создаст пустую базу данных, а executeQuery не сможет сказать, что таблица не найдена.

Сообщите мне, что вы найдете.

person Rob    schedule 31.07.2012
comment
+1 Спасибо огромное, Роберт! Ты прав. Проблема была только с копированием файла в папку «Документы». Я использовал код, который вы упомянули в другом посте, все сработало! В очередной раз благодарим за помощь. Все это время было отличным обучением с SQLite. Хотел бы я дать +100 :) Т.Г. - person GenieWanted; 07.08.2012