0

作成したアプリを更新していますが、実行時に問題が発生しています。入力したデータを保存できるようにしたいと言われたので、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);
    }
 }

アプリは「保存に成功しました」というメッセージを表示し、ユーザーのために追加しただけでなく、正しく行われたかどうかを確認するため、データをデータベースに保存できます。そのため、何が起こっているのかよくわかりません。

4

1 に答える 1

0

シミュレーターがデータベースを保存する場所を見つけた後、私は自分の問題を見つけました。私の問題は、データのロードではなく、データの保存方法でした。助けてくれてありがとう。

于 2012-04-19T14:58:23.243 に答える