Цель-C: Управление изображениями между классами - PullRequest
0 голосов
/ 29 октября 2011

Я пытаюсь создать модель с несколькими изображениями в стиле фабричной модели.У меня есть один класс, который обрабатывает людей, один класс, который обрабатывает группу людей и ViewController.

testImage = [[UIImageView alloc] initWithFrame:CGRectMake(250, 500, 30, 30)];
testImage.image = [UIImage imageNamed:@"myImage.png"];
testImage.animationDuration = 1.5;
testImage.contentMode = UIViewContentModeCenter;
[self.view addSubview:testImage];

http://jcdeveloperworld.blogspot.com/2009/07/iphone-game-tutorial-part-1.html - Спасибо

Этот код работает, когда он находится только в viewController, и теперь я пытаюсь заставить людей следить за своим собственным изображением,Поэтому я поместил

testImage = [[UIImageView alloc] initWithFrame:CGRectMake(250, 500, 30, 30)];
testImage.image = [UIImage imageNamed:@"myImage.png"];
testImage.animationDuration = 1.5;
testImage.contentMode = UIViewContentModeCenter;
[self.view addSubview:testImage];

в отдельный класс, а затем попытался отобразить его из моего viewController.Насколько я понимаю, я не могу просто сказать viewController отображать что-то из отдельного класса.

   flock *newFlock = [[flock alloc] init];
[newFlock makeFlock];


NSMutableArray *tempFlock = [[NSMutableArray alloc] init];
tempFlock = newFlock.theFlock;

individualsClass *tempIndividual = [[individualsClass alloc] init];
tempIndividual = [tempFlock objectAtIndex:0];

UIImageView *tempImage = [[UIImageView alloc] initWithFrame:CGRectMake(250, 500, 30, 30)];

tempImage = tempIndividual.individualImage;

[self.view addSubview:tempImage];

Я также попробовал это сделать без копирования, но точечная запись начала мешать, потому чтоЯ получаю доступ к свойствам объектов в NSMutableArray (что кажется нелепо трудным в цели C).Я мог бы использовать некоторую помощь, чтобы выяснить это тоже

т.е.Это делается для приложения для iPad

Ответы [ 2 ]

1 голос
/ 29 октября 2011

Не ясно, что вы пытаетесь сделать, но вы определенно делаете много вещей, которые вам не нужны.Рассмотрим следующие строки вашего кода:

NSMutableArray *tempFlock = [[NSMutableArray alloc] init];
tempFlock = newFlock.theFlock;

Первая строка объявляет переменную с именем tempFlock типа NSMutableArray *.Затем он создает и инициализирует пустой NSMutableArray и присваивает его tempFlock.Затем вторая строка назначает newFlock.theFlock на tempFlock, перезаписывая единственную ссылку на массив, созданный в первой строке.Вы можете просто сказать это:

NSMutableArray *tempFlock = newFlock.theFlock;

В любом случае, правильный синтаксис для вашего последнего блока таков:

[flock.theFlock objectAtIndex:1].individualImage.image

Так что, возможно, это то, что вы хотите сделать:

[self.view addSubview:[flock.theFlock objectAtIndex:1].individualImage];

Кроме того, flock и individualsClass не являются хорошими именами классов в Objective-C.Flock и Individual могут быть более подходящими именами.

И сбивает с толку тот факт, что экземпляры flock имеют свойство с именем theFlock.Похоже, что theFlock - это просто массив индивидов, поэтому лучшее имя для свойства, вероятно, будет individuals.

0 голосов
/ 29 октября 2011

Если весь «точечный» синтаксис вызывает проблемы с пониманием, просто не используйте их, это всего лишь альтернативный синтаксис для вызова метода.

[значение myInstance] совпадает с myInstance.value, которое можно рассматривать как простую замену.

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

Итак, как пишет @rob:

[flock.theFlock objectAtIndex:1].individualImage.image

эквивалент может быть:

[[[[flock theFlock] objectAtIndex:1] individualImage] image]

Разбит на несколько операторов:

tempFlock = [[flock theFlock] objectAtIndex:1];
tempIndividual = [tempFlock individualImage];
image = [tempIndividual image];
...