COUNT (*) дает EXC_BAD_ACCESS - PullRequest
0 голосов
/ 25 июня 2011

При выполнении SQLITE с оператором SELECT и наличием 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 Ответ

3 голосов
/ 25 июня 2011

Вам нужно изменить NSUInteger на NSNumber:

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

Позже вы можете получить значение, используя

    NSUInteger *retrievedTaskCount = [[taskArray objectAtIndex:2] unsignedIntegerValue];

Причина этого в том, что NSArray хранит NSObject с, поэтому в любой момент, когда у вас есть int, float, NSInteger, NSUInteger и т. Д., Которые вы хотите сохранить в NSArray или NSMutableArray, вам нужно будет преобразовать его в объект. NSNumber - это классная сборка только для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...