Ну, я делаю обновление для приложения, которое я сделал, но у меня есть некоторые проблемы во время выполнения. Люди сказали, что хотят иметь возможность сохранять введенные данные, поэтому я внедряю базу данных SQLite. Я получил приложение, чтобы проверить, существует ли база данных, и создать все необходимое, если база данных или таблица базы данных не существует. Однако у меня возникают проблемы с получением данных из SQLite. Когда я нажимаю кнопку, которая должна загрузить данные, приложение вылетает. Я пытался использовать как NSLog, так и UIAlertView, чтобы выяснить, что происходит, но не могу получить результаты. Однако при выполнении тестового запуска в SQLite запрос, который я выдаю, правильный, поэтому должно быть что-то еще.
следующий код, который я использую для получения данных:
- (IBAction)loadData
{
NSDateFormatter* bf = [[NSDateFormatter alloc] init];
[bf setDateFormat:@"MM/dd/yyyy"];
NSDate* sdate;
NSString* birthDate;
NSString* balance;
NSString* dyear;
sqlite3_stmt *stmt;
// get document directory
NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsDir = [dirPaths objectAtIndex:0];
// build path to database
dbpath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"mrd.db"]];
const char *dpath = [dbpath UTF8String];
if (sqlite3_open(dpath, &mrdDB) == SQLITE_OK)
{
NSString* query = [NSString stringWithFormat:@"SELECT date(birth), bal, year FROM rmd LIMIT 1"];
const char* query_statement = [query UTF8String];
if (sqlite3_prepare_v2(mrdDB, query_statement, -1, &stmt, NULL) == SQLITE_OK)
{
if (sqlite3_step(stmt) == SQLITE_ROW)
{
birthDate = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(stmt, 1)];
balance = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(stmt, 2)];
dyear = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(stmt, 3)];
sdate = [bf dateFromString:birthDate];
self.birth.text = [bf stringFromDate:sdate];
[birthDate release];
[bf release];
self.bal.text = balance;
[balance release];
self.year.text = dyear;
[dyear release];
self.status.text = @"data loaded sucessfully";
} else {
self.status.text = @"Cannot find/retrieve saved data";
}
sqlite3_finalize(stmt);
}
sqlite3_close(mrdDB);
}
}
Приложение может сохранять данные в базе данных, так как приложение отображает сообщение «сохранение успешно», которое я добавил для пользователя, а также для проверки правильности выполнения действий, поэтому я не слишком уверен, что происходит.