NSMutableArray withObject (UIImageView *) - PullRequest
1 голос
/ 10 апреля 2010

Я пытаюсь загрузить NSMutableArray с UIImageViews. Все идет хорошо с этим.

К сожалению, я понятия не имею, как использовать объекты, когда они находятся в изменяемом массиве.

Вот код:

UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
NSMutableArray *array = [NSMutableArray new];
[array loadWithObject:(UIImageView *)imageView];
[imageView release];

Так настраивает то, что я сделал. Вот что я хочу сделать:

[array objectAtIndex:5].center = GCRectMake(0, 0);

но это не работает. Как я могу это сделать ??

Ответы [ 2 ]

3 голосов
/ 10 апреля 2010

Я думаю, что вы должны ссылаться NSMutableArray .

Тем не менее, я просто даю обзор NSMutableArray.

  • NSMutableArray = Следующий шаг (NS) Изменяемый массив
  • Изменяемый означает, что массив может быть изменен по мере необходимости.
  • Теперь этот изменяемый массив может содержать объекты любого типа.
  • Предположим, что я хочу хранить строки в массиве. Я бы написал следующие заявления.

NSMutableArray *anArray=[[NSMutableArray alloc] init];
[anArray addObject:@"Sagar"];
[anArray addObject:@"pureman"];
[anArray addObject:@"Samir"];

  • Здесь я обнаружил, что вам нужно хранить imageViews в ваших требованиях.

NSMutableArray *anArray=[[NSMutableArray alloc] init];
UIImageView *imgV1=[[UIImageView alloc] initWithFrame:CGRectMake(10,50,60,70)];
UIImageView *imgV2=[[UIImageView alloc] initWithFrame:CGRectMake(10,110,60,70)];
UIImageView *imgV3=[[UIImageView alloc] initWithFrame:CGRectMake(10,170,60,70)];
UIImageView *imgV4=[[UIImageView alloc] initWithFrame:CGRectMake(10,210,60,70)];
[anArray addObject:imgV1];
[anArray addObject:imgV2];
[anArray addObject:imgV3];
[anArray addObject:imgV4];

  • Теперь, когда ImageViews добавлены в массив, выпустите imageviews, так как массив имеет счет сохранения.

[imgV1 release];
[imgV2 release];
[imgV3 release];
[imgV4 release];

  • Выше кода добавит изображения в NSMutableArray
  • Когда вы используете одно из изображений из массива, просто запишите эту вещь
    UIImageView *x=[anArray objectAtIndex:0];

  • Надеюсь, что вышеприведенные описания работают на вас.

  • Добавьте комментарий, если вы не поняли.
3 голосов
/ 10 апреля 2010

ОК, я объясню проблемы, с которыми вы столкнулись. Способ сделать то, что вы пытаетесь сделать, заключается в следующем:

UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
NSArray *array = [NSArray arrayWithObject:imageView];
[imageView release];
[[array objectAtIndex:0] setCenter:CGPointMake(0.0,0.0)];

Во-первых, нет способа -[NSMutableArray loadWithObject:]. Аналогично, для вашего примера вам даже не нужен изменяемый массив. У изменчивых объектов есть свое место, но я обычно стараюсь использовать неизменяемые, когда это имеет смысл; в качестве такового я использовал NSArray.

Далее, вам никогда не нужно типизировать объекты при добавлении их в массив. Есть несколько причин, почему ваш пример не сработал:

  1. Вы обращались к шестому (начиная с одного) объекту в массиве. Был ли экземпляр UIImageView по этому индексу?

  2. По какой-то причине точечная нотация для методов получения и установки работает только тогда, когда компилятор знает тип объекта, которому вы отправляете сообщение. Поскольку тип объекта, который выходит из массива, неясен во время компиляции, вы не можете использовать точечную нотацию. Вместо этого просто используйте старомодный синтаксис отправки метода Objective C («скобки и двоеточия»).

  3. Наконец, это Core Graphics , а не Gore Craphics : следовательно, префикс CG, а не GC. Кроме того, -[UIImageView setCenter:] занимает CGPoint, а не CGRect. Итак, функция, которую вы хотели, была CGPointMake.

Удачи вам! Дайте мне знать, если это поможет прояснить некоторые вещи.

...