私が作ったアプリを更新していますが、ランタイムに問題があります。人々は、彼らが入力したデータを保存することができると言ったので、私は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
報告されたエラーは、 "int retVal = UIApplicationMain(argc、argv、nil、nil);"エラーは「プログラム受信信号: 'SIGABRT'」です(ここでは二重引用符で囲んで一重引用符が使用されています)。 – user1013391
スタックを見て問題のコード行を見つけてください。あるいは、このルーチンでデバッグのブレークポイントを設定し、それを実行してどこに問題があるのかを簡単に見てみましょう。日付を文字列として取得し、日付に変換してから文字列に変換するのはどうですか?たとえば、sdateがnilだった場合(それはあなたのdateformatter形式の文字列に準拠しているので)、私は驚いていません。知りません。しかし、このルーチンとあなたの問題を一歩一歩進んであなたに飛び出します。 – Rob