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