2011-12-27 3 views
0

서버에서 데이터를 다운로드 할 수있는 모델이 있으므로 상태 표시 줄과 화면 모두에서 작업 표시기를 표시해야합니다.모델과 컨트롤러 모두 표시해야하는 경우 활동 표시를 담당해야하는 클래스는 무엇입니까?

하지만 UIWebView에는 콘텐츠를 표시하고, 콘텐츠에는 링크가 있으며, 일부는 로컬이고 일부는 원격입니다. 원격 링크를 다운로드해야하는 경우 활동 표시기를 다시 표시해야합니다.

이 작업을 수행하기위한 디자인 옵션은 무엇입니까?

앱 대리인은 모델 및 컨트롤러의 지시에 따라 작업 표시기를 시작하고 중지 할 수있는 메서드를 가질 수 있습니다. 그러나 어쨌든 이것은 나에게 꽤 깨끗해 보이지 않는다. 애플 리케이션 델리게이트를 잡다한 잡다한 기능을 버킷으로 사용하기 시작한 것이다.

나는 모델이 자체 활동 표시를 처리해야한다고 생각하고 컨트롤러는 자체적으로 처리해야한다. 그러나 내가 그렇게했다면 모델이 UI 관련 물건을 최소한 (최소한이라도)하고있는 상황이 발생하지 않을까요?

깨끗한 권장 솔루션이 있습니까?

+0

올바르게 설계된 경우 모델에서 UI 구성 요소에 액세스 할 필요가 없습니다. – Till

+0

OP에 좋은 점이 있습니다. 'UIApplication'의 인스턴스에서'BOOL'을 직접 UI 조작으로 간주하고 있습니까? 상태 표시 줄의 UI를 처리하는 응용 프로그램 개체입니다 ... –

답변

0

IMO, 활동 표시기는 특정보기와 독립적 인보기 구성 요소이므로 응용 프로그램 대리인이 관리해야합니다.

내가 태클 한 방식은 ActivityManager 클래스를 만들고 응용 프로그램 대리인에서 인스턴스를 만들고 인스턴스화하는 것입니다. 그것은 UIWindow의 인스턴스를 취하고 그로부터 인디케이터를 적절하게 중앙에 배치하고 표시하는 방법을 결정할 수 있습니다. 응용 프로그램의 다른 모든 영역은 관찰자 패턴을 통해이 클래스와 상호 작용합니다. 네트워크 상태가 변경되고 활동 관리자가 응용 프로그램의 전체 상태를 평가하여 표시기를 표시하거나 숨길 필요가 있는지 확인하면 알림을 게시합니다. 관리자가 이러한 통지 일이 필요한 것을 평가할 수있다 관찰 때 그렇게 있도록 새로운 알림을 추가 할 수있는 기능을 추가했습니다

ActivityManager *activityManager = [[ActivityManager alloc] initWithWindow:self.window]; 

self.activityManager = activityManager; 

[activityManager release]; 

[self.activityManager addNotification:kNetworkStatusDidChangeNotification]; 

[self.activityManager addAsyncActivity:[HttpManager defaultManager]]; 

[self.activityManager startObserving]; 

: 여기 당신이 내 응용 프로그램에서 볼 수있는 무엇의 샘플입니다. AsyncActivity는 싱글 톤을위한 프로토콜 일 뿐이며 데이터를 처리 중인지 확인할 수 있습니다. 그런 다음 매니저에게 관찰을 시작하라고 지시합니다. 내 응용 프로그램을 닫을 때 나는 단순히 전화 :

[self.activityManager stopObserving]; 

모든 관찰자 최대 무료 메모리를 제거합니다. 그렇게하면 올바른 방향으로 시작해야합니다. 다른 방법이있을 것이라고 확신합니다. 그러나 그것은 저에게 그것을 다루기위한 가장 침해적인 방법처럼 보입니다. 또한 매우 휴대하기 편리합니다.

0

여러 네트워크 이벤트가 동시에 발생하여 모든 활동을 정확하게보고해야하는 것처럼 들립니다. 네트워크 작업을 추적하고 UIApplication의 인스턴스와 통신하는 책임 만있는 별도의 클래스가 순서대로되어있을 수 있습니다.

간단한 카운터를 사용하여 네트워크 작업 수를 추적하는 개체를 상상해보십시오. 이벤트를 추가하면 카운터가 증가하고 카운터를 제거하면 카운터가 감소합니다. 카운터가 0보다 큰 경우 회 전자가 표시됩니다. 이는 응용 프로그램과 모델 계층 간의 통신을 캡슐화하는 합리적인 접근 방법 일 수 있습니다.

관련 문제