1

FMDB executeUpdate を使用して、以下の挿入ステートメントで EXC_BAD_ACCESS を取得します。FMDatabase の bindObject toColumn で発生します。

NSlog ステートメントでは、正しい値が得られますが、update ステートメントが爆発します。ここで何が間違っているのかわかりません。

- (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 コードを調べましたが、最初の変数のように見えます。NSInteger と NSNumber の両方で保存しようとしましたが、どちらも同じクラッシュを引き起こしました。

クラッシュする FMDatabase の正確な行は次のとおりです。

    else if ([obj isKindOfClass:[NSData class]]) {

subject_id を NSInteger (または NSNumber) として渡し、エラーを出しています。

4

1 に答える 1

2

FMDB executeUpdate ステートメントでは、NSInteger ではなく NSNumber を使用する必要があるため、executeUpdate ステートメントの一部として NSInteger を NSNumber に変換すると機能します。何時間もかけてこれを探し、ついに見つけました。

これがどのように見えるべきかの例です:

[database executeUpdate:@"update Subject Set subject = ?, category = ? where subject_id = ?", self.title, self.category_title, [NSNumber numberWithInt:self.subject_id]];
于 2012-01-30T06:21:58.987 に答える