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の両方で保存しようとしましたが、どちらも同じクラッシュを起こしました。
else if ([obj isKindOfClass:[NSData class]]) {
それはNSInteger(またはのNSNumber)としてsubject_idを通過し、エラーを与えている:
それがクラッシュFMDatabaseから正確な線です。
:ここ
は、それがどのように見えるべきかの一例です。 – zneakNSNumberはどのように "id"値で、NSIntegerはありませんか? – jroyce
'NSNumber'は任意の種類の数値を表すObjective-Cクラスです。 'NSObject'を継承した' NSValue'を継承しています。一方、 'NSInteger'と' NSUInteger'はプリミティブ型です。これらはObjective-Cオブジェクトではないので、 'id'に変換することはできません。可変数の引数を受け入れるObjective-Cメソッドは、受け取る引数の型をチェックすることはできません。これはコンパイル時には動作しましたが、実行時にはクラッシュしました。 – zneak