使用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);
}
}
答案 0 :(得分:3)
您需要将NSUInteger
更改为NSNumber
:
NSMutableArray *taskArray=[[NSMutableArray alloc]initWithObjects:ID, KEY, [NSNumber numberWithUnsignedInteger:taskCount],nil] ;
您可以稍后使用
检索该值 NSUInteger *retrievedTaskCount = [[taskArray objectAtIndex:2] unsignedIntegerValue];
这样做的原因是NSArray
存储了NSObject
,所以只要您拥有int
,float
,NSInteger
,{{ 1}}等,您希望存储在NSUInteger
或NSArray
中,您需要将其转换为对象。 NSMutableArray
是一个专门为此构建的类。