NSInteger和int给出异常

时间:2011-08-10 12:05:06

标签: iphone objective-c ios nsinteger sqldatatypes

我正在尝试使用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语句中使用年份?

2 个答案:

答案 0 :(得分:3)

NSInteger不是对象类型。它只是typedef类型int。因此,您不能使用%@作为格式说明符。您应该使用%d

答案 1 :(得分:0)

由于您的年份变量属于NSInteger类型,因此您应该在创建NSString时使用%d格式而不是%@