2010-04-16 2 views
1

내 응용 프로그램에 Three20TTMessageController을 사용하고 있습니다. 다른 것들 (예 : TTMessageControllerDelegate 메서드 및 ABPeoplePickerNavigationControllerDelegate 메서드 포함) 잔뜩 추가하여 그것을 사용하는 방법을 알아 냈습니다. 그것을 해결하기위한 약간의 노력 끝에 나에게 큰 도움이됩니다.두 컨트롤러에서 modalViewController를 동일하게 사용하려면 어떻게해야합니까?

내가 지금 당면하는 문제는 디자인 문제입니다. 같은 위임 방법을 포함하여 두 곳에서 똑같이 사용하고 싶습니다.

ComposerProxy *proxy = [[ComposerProxy alloc] initWithController:this]; 
[proxy go]; 

을 : 내 현재의 접근 방식은 내가 NSObject에서 상속 하나의 클래스에 모든 코드를 넣어 ComposerProxy라고, 나는 그냥과 같이, 프록시를 사용하는 사용하는 두 개의 컨트롤러에 봉착 한 것입니다 go 방법은 그것을 구성하는 UINavigationController에 추가의 TTMessageController 구축하고이를 제공 :

[self.controller presentModalViewController: navController animated: YES]; 

내 모든 코드가 잘 ComposerProxy에 캡슐화 가지고이, 잘 작동하고 나는 단지 위의 두 줄을 어디서든 필요 그것을 사용하고 싶다.

그래도 오류가 발생하지 않고 deallocproxy 변수를 사용할 수 없다는 것이 단점입니다. 나는 autorelease 그것 일 수 없다 : 동일한 문제.

그래서 내 프록시 접근 방식이 좋지 않은지 궁금 하네. 일반적으로 클래스를 사용하는 클래스에서 많은 중복 코드가 필요없이 이러한 동작을 캡슐화하는 방법은 무엇입니까? ComposerProxy에 대리자 클래스를 추가하고 컨트롤러가 가상의 composerDidFinish 메서드 또는 일부에서 모달 뷰 컨트롤러를 닫지 않도록 할 필요가 있습니까?

많은 TIA!

답변

1

위에서 본 것부터 볼 때 충돌이 반드시 잘못된 디자인을 나타내는 것은 아닙니다. 메모리 관리 문제가 발생할 가능성이 있습니다. 어쩌면 컨트롤러가 과도하게 발표되고, 말하기가 어렵습니다. 어떤 충돌이 나고 있습니까?

현재 디자인이 괜찮은 것처럼 보일 수도 있지만 UIViewController에 category을 만들 수도 있습니다. 범주는 상속을 복제하거나 상속하지 않아도 모달 TTMessageController를 표시하는 데 필요한 모든 코드를 범주를 가져 오는 UIViewController 하위 클래스에 추가합니다.

@interface UIViewController (Composer) 
// categories can't add instance vars, so return the new controller if you need to store it... 
- (TTMessageController *)presentMessageController; 
@end 

@implementation UIViewController (Composer) 
- (TTMessageController *)presentMessageController { 
    // contents of ComposerProxy#go except referring to 'self' instead of 'self.controller' 
} 
@end 
+0

아, 카테고리를 추가 할 생각이 없습니다. 그것은 아주 좋은 생각입니다. (저는 컨트롤러가 아닌 다른 것들을 위해했습니다.) 나는 카테고리가 그것을 구현하는 대표자를 추가한다고 생각한다. 호출 클래스는 인스턴스 속성에 프록시 객체를 유지하지 않으므로 메모리 문제가 발생합니다. 따라서 인스턴스가 삭제되면 참조가 없으므로 제대로 작동하지 않습니다. 문제를 해결할 수있는 방법이 있다면 숙고 해 왔지만 어쨌든 카테고리를 사용하는 것이 더 좋은 방법 일 것입니다. 감사! – theory