0

이 질문에 대한 대답은 찾기 쉽지만 실제로는 그렇지 않다고 생각했습니다. 기본적으로 MVC의 우수 사례에 관한 내용이지만 Cocoa의 MVC 구현에 대한 구체적인 답변이 필요합니다.코코아의 다른 ViewController 사이의 통신

Bindings를 통해 변경 가능한 배열의 데이터를 표시하는 MainView와이 배열에 새 항목을 추가하는 옵션이 있다고 가정 해 보겠습니다. 이제는 배열에 추가 된 데이터가 더 복잡해질 수 있으며 배열에 추가하기 전에 유효성 검사가 필요하거나 데이터 클래스의 개체를 만들 수 있습니다. 그래서, 나는 새로운 MVC를 추가했거나 모든 데이터를 입력 할 수있는 뷰와 그것을 저장하는 버튼 인 내 프로젝트에보다 특정한 VC 쌍을 추가했습니다. 저장 버튼을 클릭하면 유효성 검사가 시작되고 결과적으로 유효성 검사가 성공하면 배열에 데이터를 추가해야합니다.

AddViewController에서 배열에 액세스하는 가장 좋은 해결책이 궁금합니다. 공유 가능한 배열? AddViewController에 속성을 설정 하시겠습니까?

MVC에 익숙한 사람에게는 대답이 매우 쉽습니다. 또한 배열에 액세스 할 수 있지만 실제로 그렇게하는 것이 가장 좋은 방법인지 알고 싶습니다.

+0

중복 가능성 (http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) – Rob

답변

1

Delegate concept는 모든 문제에 대한 답변입니다.

데이터 유효성 검사가 성공하면

은 MAINVIEW 컨트롤러로 데이터가 배열 :

세부 사항에 추가 할 통과 : 귀하의 AddViewController가

@protocol AddViewControllerDelegate <NSObject> 

-(void)addViewController:(AddViewController*)addViewController didCompleteWith:(id)data; 

@end 

@interface AddViewController : SuperClass 

@property (nonatomic,weak)id<AddViewControllerDelegate>delegate; 
... 

@end 

기본 재산 프로토콜을 가지고 있고, 위임한다 뷰 컨트롤러는이 프로토콜을 구현해야하며 자체적으로 AddViewController 대리자로 설정해야합니다.

데이터 유효성을 검사 할 때 AddViewController는 대리인에 대해 프로토콜 정의 메서드를 호출해야합니다. [보기 컨트롤러 간의 데이터 전달]의

-(void)dataValid:(id)data { 
... 
[self.delegate addViewController:self didCompleteWith:data] 
... 
} 
+1

+1 동의. 그러나 나는 (a) '대의원'은 '약한 재산'이어야한다고 제안 할 수있다. 그리고 (b)'addData' 메쏘드 이름 대신에,'ABNewPersonViewControllerDelegate' 이후에 그것을 모델링하고 그 메소드'didCompleteWithNewXxx' ("Xxx'는 추가되는 객체의 타입입니다)를 호출 할 것입니다. 분명히 더 의미있는 클래스입니다 및 프로토콜 이름 (예 : 'AddXxxViewController'와'AddXxxViewControllerDelegate'를 사용하십시오. – Rob

+0

잘 눈치 채 셨습니다. 메소드 이름 제안도 마음에 들었습니다. –

+0

@Rob이 제안하는 명명 규칙을 승인합니다. 나는 완전히 깨끗한 이름과 좋은 구조화 된 코드를 가지고 있습니다. 당신의 도움을 주셔서 감사합니다! – florianrogner