2011-10-03 2 views
4

그래서 몇 번 실행 해 보았습니다. OOD를 처음 접했을 때 좋은 방법이 있는지 없는지 잘 모릅니다.아이폰 용 객체 지향 설계

하지만 기본적으로 MainViewController가 있으며 새로운 DetailViewController를 푸시합니다. 내 MainViewController에서 기본적으로 모든 것을 기본값으로 재설정하는 Reset 메서드가 있습니다.

버튼을 DetailViewController에서 다시 호출하기 위해서 MainViewController 클래스에있는 메소드를 호출하려면 어떻게해야합니까?

이전에 수행 한 작업은 ParentController (이 경우 MainViewController)에 대한 참조를 가져온 다음 DetailViewController에서이 방식으로 호출합니다. 나는 이것이 좋은 연습인지 그리고 이런 식으로 할 수있는 더 좋은 방법이 있는지 모르겠습니다.

감사합니다.

+1

아주 합리적으로 들리며 정확하게 할 수 있습니다. – Luke

+0

아름다운. 나는 클래스 메소드를 만드는 더 비효율적이고 틀림없이 더 복잡한 방법으로 갔을 것이다.오늘보다 더 명확하게 생각할 수있는 명성 : P – CodaFi

답변

0

아마도 MainViewController를 DetailViewController의 대리자로 만들고 싶을 것입니다. Apple의 프레임 워크는이 패턴을 모든 곳에서 사용하므로이를 예제로 사용할 수 있습니다. 이와 같은 참조를 할 때 기억주기가 형성되지 않도록하거나 메모리가 누출 될 수 있는지 확인하십시오. 대의원을 보유하지 마십시오.

+0

앱 코드의 어디에서든지 위임자를 호출하려면 : MyApplicationDelegate * appDelegate = (MyApplicationDelegate *) [[UIApplication sharedApplication] delegate]; – CodaFi

+0

앱 위임을 의미하지는 않습니다. 나는'@property (nonatomic, assign) MainViewController * delegate;를'DetailViewController.h'에 추가하는 것을 의미했습니다. – Icydog

+0

죄송합니다, 오늘은 직선이 아닙니다. – CodaFi

0

"위임 패턴"과 그 좋은 디자인 중 하나를 따르고 있습니다. 같은 접근 방식을 사용하는 것이 좋습니다. 책 "Cocoa Design Patterns"을 확인하면 디자인 패턴을 잘 이해할 수 있습니다.

경우에 따라 DetailsViewController에 "id"유형의 대리자를 만들고 속성을 작성한 다음 MainView에서 DetailsViewController 개체를 푸시 할 때 설정하십시오. 그런 다음 해당 대리인의 "ResondsToSelector"를 사용하여 메서드를 호출합니다. 코드 스 니펫을 원한다면 알려주십시오.

0

우선 자세히보기에서 재설정 버튼을 사용하는 것이 좋습니다. OOD 관점에서 보면 약간 불편한 이유와 같은 이유로 UI 조직의 관점에서 이해가되지 않을 수도 있습니다.

좋아, 버튼을 갖고 싶다고 결정했다고 가정 해보십시오. 그런 다음 DetailViewController가 어떤 큰 의미의 문맥인지 알고 있어야하는 것처럼 보입니다. 재설정해야 할 것이 있다는 것을 알아야합니다. DetailViewController에 MainViewController에 대한 포인터를 지정하고 MainViewController *로 선언하는 것이 좋습니다. DetailViewController가 뭔가를 재설정 할 필요가 있음을 알기는하지만, 실제로 무엇을 알지 못한다면, DetailViewController가 MainViewController와 대화한다는 사실을 추상화 할 필요가 없다고 생각하지 않아 DetailViewController가 될 가능성을 열어 둡니다. 다른 종류의 부모의 자식. 따라서 프로토콜이 필요 없습니다.

옵션 C, 데이터 모델을 나타내는 개체를 가질 수 있습니다. 클래스 Thing의 인스턴스이며 프로토콜 ThingModel을 준수한다고 말할 것입니다. MainViewController와 DetailViewController에 모두 ThingModel에 대한 포인터, 즉 id로 선언 된 속성을 지정합니다. 재설정하려는 경우 [self.thingModel reset]을 호출합니다.

이제 데이터가 재설정되지만보기를 어떻게 재설정합니까? 가능한 많은 옵션. 하나는 DetailViewController가 reset을 호출 할 때 다음 행에 DetailViewController가 데이터 모델을 반영하기 위해 수행해야하는 작업을 수행 할 수 있습니다. 이제는 비어 있습니다. 어쩌면 MainViewController는 아직 아무 것도하지 않지만 다음에 표시 될 데이터 모델과 일치하도록 자체를 업데이트합니다.