2011-08-24 3 views
3

Tabview 컨트롤러와 내부에 두 개의 컨트롤러 (mapview 컨트롤러 및 tableview + NSFetcheddata 컨트롤러)가 있습니다. 둘 다 핵심 데이터에서 특정 날짜에 대한 정보를 표시하고 모달로 하루 선택기를 표시하는 버튼이 있습니다.iOS : 다른 탭보기 컨트롤러에 데이터 세트의 변경 사항을 알립니다.

모달 뷰 컨트롤러가 위임을 통해 사라질 때 내 컨트롤러 데이터 집합을 변경하는 데 성공했지만 두 컨트롤러가 모달 컨트롤러를 표시 한 데이터뿐만 아니라 데이터를 업데이트하려고합니다.

두 컨트롤러에서 프로토콜을 만들고 대리자로 설정하는 방법에 대해 생각했지만 지금 당장하고 있는지 알고 싶습니다.

건배,

티에리

답변

7

다양한 방법으로이 작업을 수행 할 수 있습니다. 한 가지 방법은 NSNotificationCenter를 사용하는 것입니다. 원인 컨트롤러에서

- (void)dataUpdated:(NSNotification *)notification 
{ 
    // Handle updates here 
} 

: 데이터를 업데이트 할

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataUpdated:) name:CSDataUpdatedNotification object:nil]; 

그리고 dataUpdated:을 구현 :

static NSString *const CSDataUpdatedNotification = @"CSDataUpdatedNotification"; 

이 컨트롤러 모두에이 알림에 가입 : 사용자 정의 알림 이름을 정의 변경 사항, 공지 사항 게시 :

- (void)updateData 
{ 
    // Data updating routine 
    // ... 

    [[NSNotificationCenter defaultCenter] postNotificationName:CSDataUpdatedNotification object:self]; 
} 
+0

고마워요! 이것을 처리 할 수있는 적절한 방법으로 보입니다. 지금까지 내가했던 것처럼 델리게이트의 메서드에서 델리게이트의 메서드를 호출하는 것은 실제로 옳지 않습니다. –

1

당신은 (즉, 두 대표) 대리자로 모두 설정할 수 있으며, 모두 모달 뷰 컨트롤러를 다시 사용.

NSNotificationCenter, 을 사용하십시오. 그러나 위와 같은 방식으로 관계가 더 가까우므로 위임 방법이 더 좋습니다.. 하나 이상의 객체에 메시지를 보내려면 이동하는 방법입니다.

+0

위임 패턴은 실제로 1 대 1 관계 만 위해 설계되었습니다. NSNotifications는 갈 길입니다. –

+0

크리스, 고맙습니다. – Mundi

+0

답장을 보내 주셔서 감사합니다. Cameron의 알림 사용 예제를 사용했습니다. –

0

Thierry, 은 iOS를 처음 접했을 때 "대답"이라고 부르지는 않았지만 글로벌 알림 시스템을 사용하는 것은 나에게 이런 종류의 문제가 발생한다고 올바르게 인식하지 못합니다.

비슷한 문제에 대한 답변을 찾고 난 결과를 계산할 NSFetchedResultsController에 대한 참조를 우연히 발견하고 지식을 읽는 UITableView 모델로 즉시 사용할 수 있습니다. 귀하의 문제와 관련된 부분은 NSFetchedResultsControllerDelegate 대리인 인 것으로 보입니다. NSFetchedResultsControllerDelegate는 결과에 대한 변경 사항을 관심있는 사람들에게 전달할 수있는 몇 가지 방법을 정의합니다.

그러나 내가 말했듯이, 나는 단지 그것을 우연히 발견했고, 이제 막 사용하려고합니다.

감사합니다.

관련 문제