COUNT(*)给出了EXC_BAD_ACCESS

时间:2011-06-24 22:05:22

标签: iphone objective-c ios sqlite

使用SELECT语句执行SQLITE并使用COUNT(*)来计算该列的总数时,给我EXC_BAD_ACCESS。 它将一个数组从一个数组添加到另一个数组时向我发送错误。不知道为什么会这样做,但有任何人遇到这样的问题可以帮助周围吗?

-(void) title{

self.array = [[[NSMutableArray alloc] init] autorelease];
const char *query_stmt = "SELECT DISTINCT ID, KEY, COUNT (*)  FROM TEST GROUP BY KEY";
if (sqlite3_prepare_v2(database, query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
    while(sqlite3_step(statement) == SQLITE_ROW)
    {
        NSString *ID = [NSString stringWithUTF8String:(char *) sqlite3_column_text(exhProduct_statement, 0)];
        NSString *KEY = [NSString stringWithUTF8String:(char *) sqlite3_column_text(exhProduct_statement, 1)];
        NSUInteger taskCount=  sqlite3_column_int(exhProduct_statement, 2);
        NSMutableArray *taskArray=[[NSMutableArray alloc]initWithObjects:ID, KEY, taskCount,nil] ; <--- Error

        [self.array addObject:taskArray];
    }
    sqlite3_finalize(statement);        
}       
}

1 个答案:

答案 0 :(得分:3)

您需要将NSUInteger更改为NSNumber

    NSMutableArray *taskArray=[[NSMutableArray alloc]initWithObjects:ID, KEY, [NSNumber numberWithUnsignedInteger:taskCount],nil] ;

您可以稍后使用

检索该值
    NSUInteger *retrievedTaskCount = [[taskArray objectAtIndex:2] unsignedIntegerValue];

这样做的原因是NSArray存储了NSObject,所以只要您拥有intfloatNSInteger,{{ 1}}等,您希望存储在NSUIntegerNSArray中,您需要将其转换为对象。 NSMutableArray是一个专门为此构建的类。