Я написал простое приложение, которое использует базу данных Sqlite. Он отлично работает на симуляторе iPhone, но не работает на моем iPhone.Sqlite не работает на самом устройстве (на моем iPhone)
-(NSString *) getFilePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,YES);
NSString *documentsDir=[paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:@"database.sql"];
}
-(void)openDatabase
{
//Open
if (sqlite3_open([[self getFilePath] UTF8String], &db) != SQLITE_OK) {
sqlite3_close(db);
NSAssert(0, @"Database failed to open.");
}
}
Выход на Xcode после запуска приложения:
2013-03-07 02:12:16.525 SqliteWorkApp[464:907] *** Assertion failure in -[SqliteWorkAppViewController insertRecord], /Users/cmltkt/Objective-C Apps/SqliteWorkApp/SqliteWorkApp/SqliteWorkAppViewController.m:77
2013-03-07 02:12:16.529 SqliteWorkApp[464:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error updating table.'
*** First throw call stack:
(0x3398e2a3 0x3b82797f 0x3398e15d 0x34263ab7 0x19b3b 0x195bd 0x357b5595 0x357f5d79 0x357f1aed 0x358331e9 0x357f683f 0x357ee84b 0x35796c39 0x357966cd 0x3579611b 0x374885a3 0x374881d3 0x33963173 0x33963117 0x33961f99 0x338d4ebd 0x338d4d49 0x357ed485 0x357ea301 0x19147 0x3bc5eb20)
libc++abi.dylib: terminate called throwing an exception
insertRecord функция:
-(void)insertRecord
{
NSString *sql = [NSString stringWithFormat:@"INSERT OR REPLACE INTO 'countries' ('name', 'flag') " "VALUES ('Sample Data','Sample Data')"];
char *err;
if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err)
!= SQLITE_OK) {
sqlite3_close(db);
NSAssert(0, @"Error updating table.");
}
}
Ошибка в методе 'insertRecord'. Покажите код этого метода. – rmaddy
Также существует ли фактический файл в каталоге «Документы» на вашем устройстве? Как написано, ваше приложение просто открывает пустую (несуществующую) базу данных. Вам либо нужно скопировать предварительно подготовленный файл базы данных со всеми пустыми таблицами, либо вам нужно выполнить SQL для создания таблиц. – rmaddy
@rmaddy делает хороший момент; если вы не включите предварительно сконфигурированную базу данных в комплекте, первое, что вам нужно сделать, это создать базу данных и ее схему. –