Xcode 面对UIApplicationMain回归带来的麻烦

Xcode 面对UIApplicationMain回归带来的麻烦,xcode,Xcode,我有个错误,请帮帮我 2013-02-21 18:43:54.471 BPApp[12574:c07] ***在-[MainViewController saveEntry:],/Users/Apple/Desktop/BPApp/BPApp/MainViewController.m:66中断言失败 2013-02-21 18:43:54.473 BPApp[12574:c07]*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“

我有个错误,请帮帮我


2013-02-21 18:43:54.471 BPApp[12574:c07]
***在-[MainViewController saveEntry:],/Users/Apple/Desktop/BPApp/BPApp/MainViewController.m:66中断言失败
2013-02-21 18:43:54.473 BPApp[12574:c07]***

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法更新表”
***第一次抛出调用堆栈:
(0x2091012 0x119ee7e 0x2090e78 0xc34f35 0x313d 0x11b2705 0xe9920 0xe98b8 0x1aa671 0x1aabcf 0x1a9d38 0x11933f 0x119552 0xf73aa 0xe8cf8 0x1fecdf9 0x1FECD0 0x2006bf5 0x2006962 0x2037bb6 0x2036F4 0x2036e1b 0x1feb7e3 0x1feb668 0xe665c 0x263d 0x2565)
libc++abi.dylib:terminate调用引发异常。

 (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 =@"";

}

是my
mainviewcontroller.m

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

问题在于您使用
NSAssert()
,它应该只用于检测和拒绝愚蠢的开发人员错误(我们经常犯的错误)

对于运行时可能发生的故障,不应使用
NSAssert()
,任何数据库交互都可能失败

相反,您应该将该代码放入一个方法中,该方法返回
BOOL
,如果插入失败,则返回
NO
。您还应该记录失败的原因,您可以使用函数
sqlite3\u errmsg()
()从sqlite3获取失败的原因


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

您是否有名为saveEntry的函数?它是否有{symbol?