2012-04-17 8 views
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); 
    } 
} 

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

+0

エラーは何ですか? – PaulG

+0

報告されたエラーは、 "int retVal = UIApplicationMain(argc、argv、nil、nil);"エラーは「プログラム受信信号: 'SIGABRT'」です(ここでは二重引用符で囲んで一重引用符が使用されています)。 – user1013391

+0

スタックを見て問題のコード行を見つけてください。あるいは、このルーチンでデバッグのブレークポイントを設定し、それを実行してどこに問題があるのか​​を簡単に見てみましょう。日付を文字列として取得し、日付に変換してから文字列に変換するのはどうですか?たとえば、sdateがnilだった場合(それはあなたのdateformatter形式の文字列に準拠しているので)、私は驚いていません。知りません。しかし、このルーチンとあなたの問題を一歩一歩進んであなたに飛び出します。 – Rob

答えて

0

私の問題は、シミュレータがデータベースを保存する場所を見つけた後に見つかりました。私の問題は、データの読み込みではなく、どのように保存されたかにありました。助けてくれてありがとう。

関連する問題