2010-07-29 3 views
1

서버와 통신하는 클래스가 있습니다 ('Downloader'). 경우에 따라 서버가 잘못된 로그인으로 인해 연결을 거부 할 수 있습니다. 이 클래스의 인스턴스는 내 프로그램을 통해 여러 다른 객체에 의해 사용되며, 로그인이 거부되면 Downloader는 RootViewController에 로그인 인터페이스를 표시하도록 지시해야합니다. RootViewController에 대한 참조가없는 다운의 인스턴스를 사용하는 클래스의 많은, 그래서 나는과 같이, (RootViewController에 대한 참조가) 내 응용 프로그램의 대리자를 통해 메시지를 전송하고 있습니다 :Application Delegate를 올바르게 사용하여 메시지 보내기

[[[UIApplication sharedApplication] delegate] loginFailed]; 

그런 다음 응용 프로그램 대리인이 rootViewController에 로그인 인터페이스를 표시하도록 지시합니다. 내 질문은 이것입니다 : 이것을 최선의 방법인가요? 그것은 작동하지만, 코딩 규칙을 고수하려고합니다. 더 좋은 방법이 있습니까?

+0

감사 :

다음은 호출 정말 간단한 개요입니다! 정말 감사! – Chris

답변

1

귀하의 방법은 매우 일반적이며 정확합니다.

// in your <myappdelegateclassname>.h 
+(void)loginFailed; 

// in your <myappdelegateclassname>.m 
+(void)loginFailed 
{ 
    [[[UIApplication sharedApplication] delegate] loginFailed]; 
} 

을 그리고 어디에서나 응용 프로그램에서 사용할 수 있습니다 : 당신이이 일을하는 경우 종종이 같은 도우미 메서드를 추가 할 수 있습니다 찾을 수

[<myappdelegateclassname> loginFailed]; 

그냥 위에서 모든 이름을 대체하여 클래스 이름.

2

이 알림을 사용하는 것이 시간이 : 다음은이 목적을 위해 응용 프로그램 대리자를 사용하는 단점에 대해 설명 싱글에 훌륭한 기사입니다.

응용 프로그램 대리인 (또는 모든 클래스)이 특정 이름의 알림을 구독하도록 설정하여 로그인에 실패했음을 알리고 로그인 시트를 당길 수 있습니다. 백그라운드 다운로더는 알림을 게시하고 그 후에 어떤 일이 일어나 든 상관하지 않습니다. 중간에있는 수업 중 어떤 것도 일어난 일을 전혀 알지 못합니다 (그들이 요청한 데이터를 얻지는 않는다는 것을 제외하고). 모든 위대한 답변을

http://mac-objective-c.blogspot.com/2009/02/nsnotifications-broadcasting-mechanism.html

+0

+1; 또한 Notification 패턴을 사용하면 구현에 App Delegate가 관련되는 것을 피할 수 있습니다. 그 루트보기 컨트롤러는 청취를 할 수 있고 적절하게 반응 할 수 있습니다. – ohhorob

관련 문제