2010-12-22 6 views
1

이 프로그램은 간단히 말해서 기본적으로 다음과 같이이다 :UIView는 UIViewController의 속성에 액세스 할 수 있습니까?

================================== =

는 는 UIViewController에가 있고, 그것을 NSInteger의 인스턴스 변수를 갖는다

:

I가 같이있는 UIViewController .H 파일 선언 : 다음

NSInterger *theNum; 
... 
@property NSInteger *theNum; 

를, I는 해당하는 .m 파일에 합성 :

@synthesize theNum; 

이 UIViewController의보기 (UIView)에는 doSomething : theNum 값에 액세스해야하는 메서드가 있습니다. ========================

-(void)doSomething { 

NSInteger *myNum = self.superview.theNum; //error: request for member 'theNum' in something not a structure or union 

// do something 

} 

: 여기

는하는 .m 파일의이 "보기"의 ​​코드 ======

그래서 UIViewController에서 theNum의 값을 UIView로 가져올 수 있습니까?

고맙습니다! 그리고 너희들 메리 크리스마스.

+0

는'NSInterger'는 경솔한 것 뷰에 뷰 컨트롤러를 추가 오타 –

답변

2

숫자를 UIViewController에서 UIView로 전달해야합니다. 컨트롤러는 뷰에 대해 알고 있어야하며 다른 방향으로는 알 수 없습니다.

//SomeView.h 
@interface SomeView : UIView 
NSInteger theNum; 
//You have NSInteger *theNum. I am guessing you made that a pointer by accident 
} 

@property(assign) NSInteger theNum; 

@end 

//SomeViewController.m 

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    ((SomeView*)self.view).theNum = theNum;//This theNum belongs to the ViewController 
} 
-1

보통 doSomething은보기 컨트롤러 일 것이고,보기는 단지 drawStuff입니다.

어쨌든 superview은보기 컨트롤러가 아니며이보기를 하위보기로 추가 한보기입니다.
일반적으로 뷰 컨트롤러에 대한 포인터가없는보기는 일반적으로 기본적으로 자체 및 하위 뷰를 그릴 것이라고 가정하기 때문에보기 컨트롤러에 대한 포인터가 없습니다.

보기 자체를 doSomething으로 설정하려면보기 클래스에 viewController 속성을 추가하고보기 컨트롤러가보기를 만들 때이 속성을 설정할 수 있습니다.

+0

있습니다. – joshpaul

+0

@joshpaul 나는 그것이 처음 네 단락을 쓴 이유에 동의한다. – filipe

관련 문제