-1

エラーが発生しました 助けてください

2013-02-21 18:43:54.471 BPApp[12574:c07] *** Assertion failure in -[MainViewController saveEntry:], /Users/Apple/Desktop/BPApp/BPApp/MainViewController.m:66 2013-02-21 18:43:54.473 BPApp[12574:c07] ***

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not update table' *** First throw call stack: (0x2091012 0x119ee7e 0x2090e78 0xc34f35 0x313d 0x11b2705 0xe9920 0xe98b8 0x1aa671 0x1aabcf 0x1a9d38 0x11933f 0x119552 0xf73aa 0xe8cf8 0x1fecdf9 0x1fecad0 0x2006bf5 0x2006962 0x2037bb6 0x2036f44 0x2036e1b 0x1feb7e3 0x1feb668 0xe665c 0x263d 0x2565) libc++abi.dylib: terminate called throwing an exception.

 (IBAction)saveEntry:(id)sender
{

int systolic = [systolicText.text intValue];
int diastolic = [diastolicText.text intValue];
NSString *comments = commentsText.text;
NSDate *theDate = [NSDate date];

NSString *sql = [NSString stringWithFormat:@"INSERT INTO summary('theDate', 'systolic', 'diastolic', 'comments') VALUES ('%@', '%d', '%d', '%@')", theDate, systolic, diastolic, comments];

char *err;
if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) !=SQLITE_OK) {
    sqlite3_close(db);
    NSAssert(0, @"Could not update table");
}else{
    NSLog(@"table updated");
}


systolicText.text =@"";
diastolicText.text =@"";
commentsText.text =@"";

}

私のですmainviewcontroller.m

4

2 に答える 2

0

あなたのエラーが言っているように、 MainViewControllersaveEntry関数に移動し、saveEntry 関数の開始行にブレーク ポイントを置き、コードを 1 行ずつコンパイルします。次に、取得している行でエラーを取得できます。

于 2013-02-21T12:14:01.547 に答える
0

問題は、NSAssert()愚かな開発者の間違い (私たちが常に犯している) を検出して拒否するためにのみ使用する必要があるということです。

実行時に発生する可能性のある障害には使用しないでくださいNSAssert()。データベースとの対話は失敗する可能性があります。

代わりに、挿入が失敗した場合に戻りBOOL、戻るメソッドにそのコードを配置する必要があります。関数(参照NO)を使用して sqlite3 から取得できる失敗の理由もログに記録する必要があります。sqlite3_errmsg()

その後、アプリケーションに適した方法でエラーを処理する必要があります。おそらく、アラート ビューを表示してからアプリを閉じるか、別の値で再試行するか、ユーザーの不快感を最小限に抑えて問題を解決するために考えられるあらゆることを行います。

于 2013-02-21T12:20:31.993 に答える