Я использую старый способ хранения данных в моем приложении, используя вызовы sqlite3.
Я запускаю это приложение на симуляторе iphone (4.1)
Приложение представляет собой контроллер представления панели вкладок с первым видом контроллера представления навигации, который выдвигает другой контроллер представления, в котором выполняется вставка.
Вставка добавляет одну запись в базу данных
- Я скопировал файл базы данных sqlite в область доступных для записи документов
- База данных открывается в appDelegate и используется контроллером представления, выполняющим вставку
- Сами операторы вставки успешно выполнены без ошибок
Я вручную прошел путь к файлу sqlite db, используемому симулятором, и вижу только одну записанную запись.
Приложение по какой-то странной причине записывает и сохраняет запись в базу данных только при первом запуске приложения. Все последующие записи не могут быть найдены.
код для вставной части
-(void) insertNewPerson:(ABRecordRef)person
{
CFStringRef fName, lName;
fName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
lName = ABRecordCopyValue(person, kABPersonLastNameProperty);
NSNumber *addressbookID = [NSNumber numberWithInteger: ABRecordGetRecordID(person)];
FunTimeAppDelegate *appDelegate = (FunTimeAppDelegate *)[[UIApplication sharedApplication] delegate];
static char *sql = "INSERT INTO contacts_main (uuid,abid,firstname,lastname,organisation) VALUES ('13568',?,?,?,'FunTime')";
if (sqlite3_prepare_v2(appDelegate.database, sql, -1, &insert_statement, NULL) != SQLITE_OK) {
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(appDelegate.database));
}
else {
sqlite3_bind_int(insert_statement, 1,addressbookID);
sqlite3_bind_text(insert_statement, 2,[fName UTF8String],-1,SQLITE_STATIC);
sqlite3_bind_text(insert_statement, 3,[lName UTF8String],-1,SQLITE_STATIC);
int success = sqlite3_step(insert_statement);
if (success != SQLITE_ERROR) {
NSLog(@"SQLITE statement executed - new person added to database");
NSLog(@"last inserted row id %d",sqlite3_last_insert_rowid(appDelegate.database));
sqlite3_reset(insert_statement);
sqlite3_finalize(insert_statement);
NSLog(@"reset");
}
else{
NSLog(@"SQLITE statement execution error");
NSAssert1(0, @"Error: failed to insert into the database with message '%s'.", sqlite3_errmsg(appDelegate.database));
}
}
}