2011-10-29 2 views
0

여러 이미지가있는 모델을 공장 모델 스타일로 만들려고합니다. 개인을 처리하는 클래스 하나와 개인 그룹을 처리하는 클래스 하나와 ViewController가 있습니다. Objective-C : 클래스 간의 이미지 관리

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에 있으며, 지금은 개인이 자신의 이미지를 추적 할 수 있도록 노력하고 그 때 코드가 작동합니다. 그래서 나는 별도의 클래스에

을 넣은 다음 내 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]; 

나는 모든 복사하지 않고 그것을 시도하지만, 점 표기법은 내가 (목표 C에서 터무니없이 어려운 것)이있는 NSMutableArray에있는 개체의 속성에 액세스하고 있습니다 때문에 방해하기 시작했다. 나는 그것을 도출하는데 도움을 줄 수있다.

즉.

flock.[theFlock.individualImage.image objectAtIndex:1] //Doesn't work 

저는 객관적인 C 언어에 익숙해 보입니다. 아마도이 문제를 잘못 공격 할 것입니다. 이것은 iPad 앱을 위해 수행되고 있습니다

답변

1

당신이하려는 일은 분명하지 않지만, 당신은 분명히 많은 것들을하고 있습니다. 코드의 다음 줄을 고려

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

첫 번째 줄은 유형 NSMutableArray *tempFlock라는 이름의 변수를 선언합니다. 그런 다음 빈 NSMutableArray을 만들고 초기화하고 tempFlock에 할당합니다. 그런 다음 두 번째 줄은 newFlock.theFlocktempFlock에 할당하고 첫 번째 줄에서 만든 배열에 대한 유일한 참조를 덮어 씁니다. 당신은이 말을 할 수 어쨌든

NSMutableArray *tempFlock = newFlock.theFlock; 

, 마지막 블록에 대한 올바른 구문이 있습니다 : 또한

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

:

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

그래서 어쩌면이 당신이 원하는 무엇인가 , flockindividualsClass은 Objective-C의 클래스 이름이 좋지 않습니다. FlockIndividual이 더 좋은 이름 일 수 있습니다.

그리고 flock 인스턴스의 이름이 theFlock 인 것은 혼란 스럽습니다. theFlock은 개인의 배열이므로 재산에 대한 더 나은 이름은 아마도 individuals 일 것입니다.

+0

나는 또한에 중요하다는 것을 강조하고자 명명 규칙에 충실하십시오. 클래스 이름은 항상 대문자로 시작해야합니다. ARC를 사용할 때 이러한 규칙은 부분적으로 적용되는 규칙이됩니다. 그러나 ARC가 없어도 다른 사람들과 동일한 규칙으로 작업 할 때 코드와 함께 작업하는 다른 사람들의 삶과 삶을 모두 편하게 만듭니다. – DarkDust

0

모든 "점"구문이 이해에 문제를 일으키고 그냥 사용하지 않으면 메소드 호출을위한 대체 구문 일뿐입니다.

[myInstance value]는 단순 대체로 볼 수있는 myInstance.value와 동일합니다.

또한 복합 구문을 길게 작성하는 것은 이해를 돕고 중간에 이름이 지정된 중간 변수를 하나 이상 사용하는 데 도움이됩니다. 컴파일러를 신뢰하여 최적화하십시오.

그래서, @ 롭 글과 같이

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

는 상당 수 :

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

여러 문장으로 나누어 :

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