2010-01-14 4 views
0

Objective-C에 iPhone 응용 프로그램을 작성하고 있습니다. 나는 그것을 인스턴스화 한 컨트롤러 (MainViewController.m)에서 메소드를 호출 할 수 있기를 원하는 클래스 (Foo.m)를 만들었습니다. 어떻게해야합니까? 예제를 제공해주십시오. 고맙습니다!클래스에서 컨트롤러의 함수 호출 (objective-c)

답변

0

당신이 할 수있는 한 가지 방법은 생성자를 참조하는 Foo 클래스에서 속성을 만드는 것입니다. 당신은 순환 참조를 방지하기 위해이 참조를 유지하지해야하지만, 코드는 다음이 경우

-(void)yourControllerClassMethod{ 
    Foo* f = [[Foo alloc] init]; 
    [f setOwnder:self]; 
} 

처럼 보일 수 있습니다, 당신의 푸 클래스는 컨트롤러 클래스는 새로운 푸 인스턴스을 할 때 설정 한 속성이라고 소유자가 . 나는 몇 가지 디자인 패턴 책을 읽고 권하고 싶습니다, 모든

[[self owner] callSomeControllerMethod]; 
+0

이것은 실제로 복잡합니다. 그는 단지 Objective-C와 Cocoa에 대해 더 많이 읽고 배우는 것이 필요합니다. –

0

첫째 : 이제 푸 클래스에서이 같은 컨트롤러 메서드를 호출 할 수 있습니다. Foo 클래스가 모델 인 경우 모델이 컨트롤러와 통신하는 이유는 무엇입니까? Foo이보기 인 경우 컨트롤러와 통신하는 이유는 무엇입니까?

이제 코드를 구조화하는 방식에 앱의 디자인 문제가 있다고 의심되지만,이를 수행 할 수있는 방법이 있습니다.

MainViewController.m이 Foo를 인스턴스화 할 때 self을 전달할 수 있으며 Foo가 이에 대한 참조를 유지할 수 있습니까?

또는 Foo에서 @protocol을 만들고 MainViewController가 Foo를 만들 때 MainViewController에서 Foo의 delegate을 구현해야합니다.

+0

Foo는 실제로 NSObject의 하위 클래스 인 내가 만든 클래스입니다. 모델이나 컨트롤러가 아닙니다. –

0

아마도 Eryk M. Buck과 Donald A. Yacktman이 Cocoa Design Patterns을 확인해야합니다. 그것은 놀랍도록 훌륭한 책이며, 비록 당신이 이미 일반적인 디자인 패턴에 익숙하지 않더라도 이해할 수 있습니다.

당신이하고 싶은 것은 다른 사람들이 말하는 위임이라고하는 패턴입니다. 위임이 어떻게 작동하는지 보려면 해당 클래스를 사용하는 모든 내장 클래스를 살펴보십시오. delegate 속성과 UIBlablaDelegate과 같은 프로토콜을 가진 것은 위임을 사용하고 있으며 클래스에서 동일한 작업을 수행 할 수 있습니다.

관련 문제