Преобразование CGRect в NSValue в массиве и наоборот

У меня есть массив, полный CGRects. Эта часть в порядке. Проблема в том, что когда я пытаюсь получить CGRects из массива, я получаю странные ошибки. Проверьте мой код.

NSArray *frameLocations = [NSArray arrayWithObjects:
                           [NSValue valueWithCGRect:CGRectMake(20, 20, 121, 124)],
                           [NSValue valueWithCGRect:CGRectMake(176, 20, 121, 124)],
                           nil];

Затем я получаю кадр в цикле for, например:

 CGRect *imageFrame = [[frameLocations objectAtIndex:i] CGRectValue];

Я пробовал кучу разных вариантов, распределяя эту строку по нескольким переменным. Но я не могу понять.


person Andrew    schedule 04.07.2011    source источник


Ответы (1)


Пытаться:

CGRect imageFrame = [[frameLocations objectAtIndex:i] CGRectValue];

Вы получаете фактический CGRect, а не указатель на CGRect, потому что это примитивный тип в стиле C, а не объект Objective-C.

Кроме того, ваш код выглядит правильно.

person Tommy    schedule 04.07.2011
comment
Вау, я чувствую себя тупым. Большое спасибо. Это действительно помогает мне. - person Andrew; 04.07.2011
comment
Не чувствуйте себя глупо — правда в том, что примитив в стиле C и объект в Objective-C часто являются просто прагматичным решением, связанным с производительностью. Со временем вы почувствуете, что есть что, но нет внутренней разницы в соглашениях об именах или чем-то подобном, поэтому поначалу легко спутать эти две вещи. - person Tommy; 04.07.2011
comment
Да, они должны были назвать его Subjective-C. - person Hot Licks; 04.07.2011