1
我获得使用FMDB的executeUpdate下面的INSERT语句的EXC_BAD_ACCESS。它发生在FMDatabase的bindObject toColumn中。为什么插入一个整数到SQLite会炸毁?
在声明的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的),并给予该错误。
作为一个更一般的规则,它只接受'id'值。 – zneak
如何为NSNumber的一个“id”值和NSInteger的是不是? – jroyce
'NSNumber'是一个Objective-C类,表示任何种类的数目。它继承自'NSValue',它继承自'NSObject'。另一方面,“NSInteger”和“NSUInteger”是基本类型。这些不是Objective-C对象,所以它们不能转换为'id'。接受可变数量参数的Objective-C方法不能检查它们接收的参数的类型;这就是为什么它在编译时工作,但在运行时崩溃。 – zneak