создать размерный массив целых чисел в цели c

Я хочу реализовать подобное, но получаю ошибку при добавлении из-за идентификатора !!!

NSMutableArray *rgbarray = [[NSMutableArray alloc] init];
 NSInteger rgb[3];
            const CGFloat *components = CGColorGetComponents(cgcolor);
            CGFloat cgred = components[0];
            CGFloat cggreen = components[1];
            CGFloat cgblue = components[2];
            rgb[0] = cgred;
            rgb[1] = cggreen;
            rgb[2] = cgblue;

            [rgbarray addObject:rgb];

я хочу добавить rgb вместо id?


person kartal    schedule 09.05.2012    source источник
comment
возможный дубликат объявления 2D-массива - цель C   -  person Richard J. Ross III    schedule 09.05.2012


Ответы (1)


Вы можете добавлять указатели только на экземпляры объектов в NSMutableArray

Вы можете использовать NSDictionary или создать свой собственный подкласс NSObject, чтобы обернуть 3 значения.

NSDictionary * rgbDictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:cgred], @"cgred", [NSNumber numberWithFloat:cggreen], @"cggreen", [NSNumber numberWithFloat:cgblue], @"cgblue", nil];

[rgbarray addObject:rgbDictionary];

Чтобы получить значения

NSDictionary * rgbDictionary = [rgbArray objectAtIndex:0];
CGFloat cgred = [[rgbDictionary objectForKey:@"cgred"] floatValue];
CGFloat cggreen = [[rgbDictionary objectForKey:@"cggreen"] floatValue];
CGFloat cgblue = [[rgbDictionary objectForKey:@"cgblue"] floatValue];

Я бы на самом деле использовал подход подкласса. Поскольку вы пытались закодировать свои значения с помощью массива C, подход NSDictionary избавит вас от ошибки.

person Jesse Black    schedule 09.05.2012
comment
Вам действительно следует использовать здесь C-массив, так как NSArray с NSNumbers невероятно медленны по сравнению с массивом c. - person Richard J. Ross III; 09.05.2012
comment
Я получил эту ошибку, когда попытался вернуть их обратно. Инициализация 'CGFloat' (он же 'float') с выражением несовместимого типа 'id'; - person kartal; 09.05.2012
comment
@salamonti Я набрал код только в браузере. Я забыл получить доступ к файлу floatValue. Поскольку мы заполнили NSDictionary NSNumbers, вам нужно использовать свойство floatValue для доступа к примитивному поплавку из NSNumber - person Jesse Black; 09.05.2012
comment
Требуется ли какой-либо файл импорта? - person kartal; 09.05.2012
comment
@salamonti скорректированный код не требует импорта. Использование метода floatValue вместо свойства. Легче заставить его скомпилировать - person Jesse Black; 09.05.2012