2010-08-12 3 views
0

대리자보기 컨트롤러를 만들고이를 사용자에게 제시하여 작업을 수행하고 있지만 원래보기 컨트롤러를 기반으로 한 대리자보기 컨트롤러에서 NSString을 변경하고 싶습니다. 예를 들어 위임 뷰 컨트롤러가 viewControllerA의 대리자이면 Foo를 표시하지만 viewControllerB 대리자가 Blah를 표시하는 경우를 예로들 수 있습니다. 비록 원래의 View Controller가 무엇인지 나타내는 정보를 전달하는 방법을 알지 못한다. NSLog (@ "나는 % @", [self delegate] 출신이다.)를한다면, 원래의 뷰 컨트롤러가 무엇인지뿐만 아니라 메모리 주소도 알려줄 것입니다. 그러나 그 값을 검사하기 위해 NSString 개체로 변환하는 것 같습니다. 그 일을하는 방법이나 더 좋은 방법이 있다면 너무 효과적입니다 ...개체를 대리인에게 전달하는 방법은 무엇입니까?

- (IBAction)editDate { 
DatePickerViewController *datePickerView = [[DatePickerViewController alloc] init]; 
datePickerView.delegate = self; 
datePickerView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:datePickerView animated:YES]; 
[datePickerView release]; 
} 

답변

2

대부분의 Objective-C 코드 작성자가 의미하는 것과 다른 방식으로 일부 용어를 사용하고있는 것처럼 보입니다.

여기에서는보기 컨트롤러를 인스턴스화하여 모달보기로 표시합니다. 이보기 컨트롤러에는 대리자라는 속성이있어 일부 메서드를 호출하여 변경 내용을 상태에보고 할 수 있습니다. 그것은 "델리게이트 뷰 컨트롤러"가 아니므로 "델리게이트가있는 객체"가됩니다.

다른보기 컨트롤러 클래스를 대리인으로 사용하고 있지만 DatePickerViewController 개체가 변경 내용을보고하기 위해 호출 할 메서드를 구현하는 개체는 해당 대리인 속성에 할당 될 수 있습니다.


나는? "내가가보고있어 개체의 종류에 따라 DatePickerViewController 디스플레이 서로 다른 정보를 어떻게해야합니까"당신이 묻고있는 질문이라고 생각하고, 대답은 어떻게 할 "와 거의 동일 나는 그것을 만든 View Controller에 따라 UILabel에서 다른 텍스트를 보여줄 수 있습니까? "- 속성을 설정하거나 만들 때에 메서드를 호출합니다. 당신이 정말 DatePickerViewController에 문자열을 전달하려면

, 당신은

datePickerView.myString = @"some information that you want"; 
0

위임자 클래스를 사용할 수 있습니다.

if([[self delegate] isKindOfClass:[ViewControllerA class]]) { 
    [self doViewControllerAThings]; 
} 
else { 
    ... 
} 
+0

는 대리인이 개체의 어떤 종류의 알 필요와 함께, DatePickerViewController에있는 NSString * 속성을 추가하고 임의의 텍스트를 설정할 수 있습니다 특히 그 기준에 따라 행동을 바꾸는 것은 구조적으로 잘못된 것을하고 있다는 신호입니다. 이 구현을 설명하는 데 이름이 바뀐 단일 대리자 메서드로 바꾸어야합니다. 이를 다형성 (polymorphism)이라고하며이를 위임 프로토콜로 통합하면 위임 클래스가 더욱 강력 해집니다. –

관련 문제