Обязательно (а) включите базу данных в пакет (см. здесь для снимка экрана, на котором можно найти" ресурсы пакета копирования "); и (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