2009-04-24 2 views
1

XIB 파일에 UIImageView가있는 MyViewController라는 UIViewController 클래스를 만들었습니다. 그런 다음이 클래스를 다른 클래스로 가져옵니다. 클래스의 인스턴스를 만들고 코드를 사용하여 UIImageView에서 이미지를 변경합니다.Cocoa Touch에서 변수 할당을 통해 클래스 계층 구조를 탐색하는 방법은 무엇입니까?

이것은 원활하게 작동합니다. 내 응용 프로그램은 본질적으로 이미지 뷰어입니다. 하위 뷰에 이미지를 미리로드하여 다음 및 이전 이미지를 캐싱하려고했습니다. 나는이 같은 변수에 myViewController 배치 할 때 :

UIViewController *pager = myViewController; 

그리고이 같은 UIImageView에 이미지를 설정하는 변수를 사용하려고 :

pager.myImageView.image = [UIImage imageNamed:@"myImage.png"]; 

나는 "오류 : 멤버에 대한 요청을 ' myImageView가 '구조체 또는 공용체가 아닌 무언가'에 있습니다. 나는 대괄호를 사용하여 그 일을 시도했습니다

[[[pager myImageView] setImage:[UIImage imageNamed:@"myImage.png"]]; 

내가 '경고'의 UIViewController는 '-myImageView'에 응답하지 않을 수 있습니다 "얻는다. myImageView로 이동하기 위해 계층 구조에 액세스하려면 어떻게해야합니까? 헤더와 @import에 @class를 사용했고 클래스 인스턴스를 합성했습니다. 내가 지금까지 가지고있는 유일한 해결책은이 작업을 수행하여, 해킹 : 변수 내가 가지고있는 UIViewController 변수에 대한 UIImageView에 변수에 대한 하나 하나의 양을 두 배로

UIImageView *pager = myViewController.myImageView; 
pager.image = [UIImage imageNamed:@"myImage.png"]; 

. 도움을 줄 수있는 사람에게 미리 감사드립니다.

답변

1

신속한 답변 :

당신은 라인을 변경해야합니다 :

UIViewController *pager = myViewController; 

에 : 당신이 추가 한 사용자 지정 속성에 액세스 할 수 있도록

MyViewController *pager = myViewController; 

당신의 MyViewController 클래스입니다.

설명는 다음 UIViewController 클래스 A를 추가하여

// MyViewController.h: 
@interface MyViewController : UIViewController 
{ 
    UIImageView * myImageView; 
} 
@property (readonly) UIImageView * myImageView; 
@end 

// MyViewController.m: 
@implementation MyViewController 
@synthesize myImageView; 
@end 

당신은 을 확장 한 :

귀하의 MyViewController 클래스는 아마 이런 식으로 뭔가 (간체)를 찾습니다 회원 v ariable 및 속성 (myImageView)을 원래 클래스에 추가합니다. 그것은 보통 오래된 UIViewController 것처럼

당신이 당신의 변수에 액세스 기본 클래스 (UIViewController)에 대한 포인터를 사용

, 당신은 그 변수를 치료하기 위해 컴파일러를 말하고있다, 그리고 평범한 구식 UIViewControllermyImageView의 개념이 없습니다 . 이것이 컴파일러 오류의 원인입니다.

+0

시간을내어 주신 eJames에게 감사의 말씀을 전하러 주신 것에 대해 감사드립니다.내 초기 문제는 위와 동일한 클래스에 대한 포인터를 보유하기 위해 배열을 사용하는 것이 었습니다. 클래스에 도달하기 위해 [myArray objectAtIndex : 0]을 사용하여 배열에 액세스하면 위와 같은 원하지 않는 결과가 나타납니다. 내 문제에 대한 해결책을 알고 있니? 나는 클래스 포인터를 배열에 집어 넣기 위해 클래스 생성자를 지정할 수 없다. 다시 한 번 감사드립니다! –

+0

배열에서 개체를 가져 오려면 MyViewController *를 사용해야합니다. MyViewController * item = [myArray objectAtIndex : 0]; item.myImageView.image = ... –

+0

또는 ((MyViewController *) [myArray objectAtIndex : 0]). myImageView.image = ... –

관련 문제