Objective-C에 iPhone 응용 프로그램을 작성하고 있습니다. 나는 그것을 인스턴스화 한 컨트롤러 (MainViewController.m)에서 메소드를 호출 할 수 있기를 원하는 클래스 (Foo.m)를 만들었습니다. 어떻게해야합니까? 예제를 제공해주십시오. 고맙습니다!클래스에서 컨트롤러의 함수 호출 (objective-c)
답변
당신이 할 수있는 한 가지 방법은 생성자를 참조하는 Foo 클래스에서 속성을 만드는 것입니다. 당신은 순환 참조를 방지하기 위해이 참조를 유지하지해야하지만, 코드는 다음이 경우
-(void)yourControllerClassMethod{
Foo* f = [[Foo alloc] init];
[f setOwnder:self];
}
처럼 보일 수 있습니다, 당신의 푸 클래스는 컨트롤러 클래스는 새로운 푸 인스턴스을 할 때 설정 한 속성이라고 소유자가 . 나는 몇 가지 디자인 패턴 책을 읽고 권하고 싶습니다, 모든
[[self owner] callSomeControllerMethod];
첫째 : 이제 푸 클래스에서이 같은 컨트롤러 메서드를 호출 할 수 있습니다. Foo
클래스가 모델 인 경우 모델이 컨트롤러와 통신하는 이유는 무엇입니까? Foo
이보기 인 경우 컨트롤러와 통신하는 이유는 무엇입니까?
이제 코드를 구조화하는 방식에 앱의 디자인 문제가 있다고 의심되지만,이를 수행 할 수있는 방법이 있습니다.
MainViewController.m이 Foo를 인스턴스화 할 때 self
을 전달할 수 있으며 Foo가 이에 대한 참조를 유지할 수 있습니까?
또는 Foo에서 @protocol
을 만들고 MainViewController가 Foo를 만들 때 MainViewController에서 Foo의 delegate
을 구현해야합니다.
Foo는 실제로 NSObject의 하위 클래스 인 내가 만든 클래스입니다. 모델이나 컨트롤러가 아닙니다. –
아마도 Eryk M. Buck과 Donald A. Yacktman이 Cocoa Design Patterns을 확인해야합니다. 그것은 놀랍도록 훌륭한 책이며, 비록 당신이 이미 일반적인 디자인 패턴에 익숙하지 않더라도 이해할 수 있습니다.
당신이하고 싶은 것은 다른 사람들이 말하는 위임이라고하는 패턴입니다. 위임이 어떻게 작동하는지 보려면 해당 클래스를 사용하는 모든 내장 클래스를 살펴보십시오. delegate
속성과 UIBlablaDelegate
과 같은 프로토콜을 가진 것은 위임을 사용하고 있으며 클래스에서 동일한 작업을 수행 할 수 있습니다.
- 1. didReceiveRemoteNotification - 현재보기 컨트롤러의 함수 호출
- 2. Java (Groovy) 클래스에서 javascript 함수 호출
- 3. 하위 클래스의 수퍼 클래스에서 호출 함수
- 4. 컨트롤러의 클래스에서 guid를 반환하는 방법
- 5. 자식보기에서보기 컨트롤러의 메서드 호출
- 6. 여러 컨트롤러의 메서드 호출
- 7. 하위 클래스에서 함수 호출하기
- 8. NumberFormatter - ObjectiveC
- 9. JS에서 컨트롤러의 ActionResult 메소드 호출
- 10. 모달 뷰 컨트롤러의 메서드 호출
- 11. 다른 클래스에서 루트보기 컨트롤러의 메서드에 액세스하려면 어떻게해야합니까?
- 12. 같은 클래스에서 함수 사용하기
- 13. 클래스에서 PHP 함수 사용
- 14. 함수 내에서 함수 호출
- 15. 함수 인수의 함수 호출
- 16. HTML 페이지의 로컬 Java/java 애플릿 클래스에서 함수 호출
- 17. 다른 클래스 (보기)의 단추가있는 클래스에서 함수 (IBAction) 호출
- 18. Upcasting 인스턴스 및 C++의 기본 클래스에서 함수 호출
- 19. 다른 ViewController 클래스에서 함수 호출하기
- 20. 라이브러리에서 모델 함수 호출
- 21. 렌더링하기 전에 함수 호출
- 22. C# winforms의 클래스에서 호출
- 23. 클래스에서 메서드 호출
- 24. getValue 클래스에서 Java 호출
- 25. 함수 호출
- 26. 함수 호출
- 27. java 자동 함수 호출
- 28. InterfaceBuilder에서 이미지 시퀀스로드 -ObjectiveC
- 29. ObjectiveC 임의 숫자
- 30. MulticastDelegate in ObjectiveC
이것은 실제로 복잡합니다. 그는 단지 Objective-C와 Cocoa에 대해 더 많이 읽고 배우는 것이 필요합니다. –