我使用FMDB executeUpdate在下面的insert语句中获得了EXC_BAD_ACCESS。它出现在FMDatabase中的bindObject toColumn上。
在NSlog语句中,我得到了正确的值,但更新语句被炸毁了。不知道我在这里做错了什么。
- (void) addSubject {
DrillDownAppAppDelegate *appDelegate = (DrillDownAppAppDelegate *)[[UIApplication sharedApplication] delegate];
FMDatabase *database = [FMDatabase databaseWithPath:appDelegate.getDBPath];
[database open];
NSLog(@"SUBJECT_ID/TITLE/CATEGORY_TITLE = %d / %@ / %@", self.subject_id, self.title, self.category_title);
[database executeUpdate:@"insert into SUBJECT (subject_id, subject, category) values(?, ?, ?)",
self.subject_id, self.title, self.category_title, nil];
[database close];
}
我浏览了FMDatabase代码,它看起来像第一个变量,subject_id是轰炸的变量。我试过保存为NSInteger以及NSNumber,两者同样崩溃。
FMDatabase崩溃的确切行是:
else if ([obj isKindOfClass:[NSData class]]) {
它将subject_id作为NSInteger(或NSNumber)传递并给出错误。
答案 0 :(得分:2)
FMDB executeUpdate语句要求您使用NSNumber而不是NSInteger,因此将NSInteger转换为NSNumber作为executeUpdate语句的一部分,它将起作用。我花了几个小时寻找这个并终于找到了它。
以下是它应该如何显示的示例:
[database executeUpdate:@"update Subject Set subject = ?, category = ? where subject_id = ?", self.title, self.category_title, [NSNumber numberWithInt:self.subject_id]];