1

FMDB を使用してデータベースからデータを取得しようとしていますが、しばらく無駄なことを試みましたが、なぜこれが EXC_BAD_ACCESS 例外をスローするのかわかりません。パラメータは NSInteger から渡されますが、ログに記録することも、SELECT ステートメントで使用することもできません。私が持っているコードは次のとおりです。

-(SQLiteResult*) getClient:(bool)forceRefresh id:(NSString*)id forYear:(NSInteger)year {
    SQLiteResult *res;
    if(!forceRefresh){
        NSMutableArray *hereditaments = [[NSMutableArray alloc] init];
        NSLog([NSString stringWithFormat:@"SELECT * FROM Clients WHERE ID = %@ AND Year = %@", id, [NSString stringWithFormat:@"%@", year]]); // exception
        NSLog([NSString stringWithFormat:@"SELECT * FROM Clients WHERE ID = %@ AND Year = %@", id, year]]); // also exception
        FMResultSet *rs = [db executeQuery:[NSString stringWithFormat: @"SELECT * FROM Clients WHERE ID = ? AND Year = %@", year], id]; // also exception
        FMResultSet *rs = [db executeQuery:[NSString stringWithFormat: @"SELECT * FROM Clients WHERE ID = ? AND Year = ?", id, year]]; // also exception

代わりに文字列として渡す寸前です。SQLステートメントで年を使用できる安全な方法はありますか?

4

2 に答える 2

3

NSIntegerオブジェクト型ではありません。それはただtypedefのタイプintです。%@そのため、書式指定子として使用することはできません。を使用する必要があります%d

于 2011-08-10T12:19:12.907 に答える
0

year 変数は NSInteger 型であるため、NSString の作成では %@ ではなく %d 形式を使用する必要があります

于 2011-08-10T12:12:35.920 に答える