2010-08-15 3 views
1

새로운 뷰 컨트롤러를 만들 때 그 속성에 값을 할당하기 전에 컨트롤러를 스택에 푸시해야만하는지 궁금합니다. 왜, 푸시 전에 값을 지정하면 값이 내비게이션 컨트롤러에도 전송되지 않습니까?프로그래밍 방식으로 뷰 컨트롤러를 만들 때 속성 범위

이 작동합니다

SomeViewController *newViewController = [[NewViewController alloc]initWith....]; 
[self.navigationController pushViewcontroller:newViewController animated:YES]; 
newViewController.property = value; 

이하지 않습니다 : 나의 새로운 뷰 컨트롤러가 UITextView 속성이있는 경우

SomeViewController *newViewController = [[NewViewController alloc]initWith....]; 
newViewController.property = value; 
[self.navigationController pushViewcontroller:newViewController animated:YES]; 

마찬가지로, 내가 때까지 인스턴스 변수로 액세스 할 수 없습니다 탐색 스택에 밀어 넣었습니다. 컨트롤러를 인스턴스화하면 인스턴스 변수에 액세스 할 수 있다고 생각했을까요?

읽어 주셔서 감사합니다.

+0

사실이 아니므로 모두 작동해야합니다. 재산이란 무엇입니까? – jtbandes

+0

아, IBOutlets 속성을 지정해야합니다. 답장을 보내 주셔서 감사합니다. –

답변

0

일반적으로 컨트롤러를 밀기 전에 속성을 설정할 수 있습니다. 두 번째 예제는 잘 작동해야한다. (필자는 코드를 자주 사용한다.)

그러나 nib 파일의 객체에 연결된 IBOutlets 속성을 다루는 경우 일반적으로 즉시 연결되지 않습니다. 보기가 펜촉에서로드되면 (일반적으로보기 컨트롤러의보기 속성에 액세스하려고 시도 할 때까지는 발생하지 않음) 콘센트가 새로 생성 된 UI 객체에 연결됩니다.

그래서보기 컨트롤러를 누른 후에 UI 속성에 액세스 할 수 있습니다. 뷰가 즉시 표시되어 강제로로드되고 개체를 사용할 수있게됩니다.

내 접근 방식은 비 IBOutlet 속성에 뷰를 표시하는 데 필요한 값을 저장하는 것인데, 뷰를 푸시하기 전에 설정했거나 탭 컨트롤러에 추가하는 등의 작업을 수행했습니다. 그런 다음 -viewDidLoad 또는 -viewWillAppear에 UI 개체를 설정합니다.

+0

감사합니다 Seamus, 내가 사용하는 속성이 IBOutlets이므로보기 컨트롤러가보기를 표시 할 때까지 사용할 수없는 이유를 이해합니다. 덕분에 . –

+0

필자는 뷰 컨트롤러를 밀어 뷰를로드한다는 보장은 없다고 생각합니다. 뷰를 강제로로드하려면 '[newViewController view]'를 명시 적으로 호출하십시오. 일반적으로보기가로드되어야하는 항목은 피하십시오. 메모리 경고가 발생하기 쉽기 때문입니다. –

관련 문제