създаване на размерен масив от цели числа в цел c

Искам да внедря подобно нещо, но получавам грешка при добавяне поради id !!!

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 Array Declaration - Objective 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 w/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 за достъп до примитивния float от NSNumber - person Jesse Black; 09.05.2012
comment
Изисква ли някакъв файл за импортиране? - person kartal; 09.05.2012
comment
@salamonti коригираният код не изисква импортиране. Използване на метода floatValue за разлика от свойството. По-лесно е да го накарате да се компилира - person Jesse Black; 09.05.2012