-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

问题是您对它的使用NSAssert()只能用于检测和拒绝愚蠢的开发人员错误(我们经常犯)。

您不应该使用可能NSAssert()在运行时发生的故障,并且任何数据库交互都可能失败。

相反,您应该将该代码放入一个方法中,该方法在插入失败时返回BOOL并返回。NO您还应该记录失败的原因,您可以使用函数sqlite3_errmsg()参考)从 sqlite3 获得。

之后,您需要通过执行适合您的应用程序的任何操作来处理错误;可能会显示一个警报视图,然后关闭应用程序,或者使用不同的值重试,或者,你能想到的任何东西,以解决问题,让用户感到最小的不适。

于 2013-02-21T12:20:31.993 回答
0

正如你的错误所说,转到MainViewController中的函数saveEntry并将断点放在 saveEntry 函数的起始行,逐行编译代码。然后你可以在你得到的那一行得到错误。

于 2013-02-21T12:14:01.547 回答