0
嗯,我正在更新我創建的應用程序,但我遇到了一些運行時問題。人們說他們希望能夠保存他們輸入的數據,所以我正在實施一個SQLite數據庫。如果數據庫或數據庫表不存在,我得到應用程序來檢查數據庫是否存在並創建所需的所有內容。但是,我有麻煩從SQLite中檢索數據。當我按下應該加載數據的按鈕時,應用程序崩潰。我試圖使用NSLog和UIAlertView來找出發生了什麼,但我無法檢索結果。但是,在SQLite中執行測試運行時,我發佈的查詢是正確的,因此必須有其他內容。嘗試從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);
}
}
該應用程序能夠將數據保存到數據庫中,作爲應用顯示「保存成功」的消息,這是我增加了對用戶的緣故以及如果事情做得對,所以我不太確定發生了什麼。
錯誤說的是什麼? – PaulG 2012-04-17 18:55:09
報告的錯誤指向「int retVal = UIApplicationMain(argc,argv,nil,nil);」並且錯誤是「Program received signal:'SIGABRT'」(單引號在這裏用雙引號括起來)。 – user1013391 2012-04-17 18:57:16
看看你的堆棧,找到有問題的代碼行。或者同樣簡單,在這個例程中設置一個調試斷點並逐步完成,看看你有什麼問題。我想知道如何將日期檢索爲字符串,將其轉換爲日期並將其轉換回字符串。例如,如果sdate是零(因爲它符合你的dateformatter格式字符串),我不會感到驚訝。我不知道。但是,通過這個例程一步,你的問題就會跳出來。 – Rob 2012-04-18 02:47:31