2010-08-17 7 views
1

내 앱은 두 개의 탭 막대 항목이있는 탭 막대 컨트롤러를 사용합니다. 각 항목은 탐색 컨트롤러입니다.여러 개의 내비게이션 컨트롤러에서 컨트롤러보기 통신

다른 탐색 컨트롤러의 다른보기 컨트롤러에서 하나의보기 컨트롤러에있는 하나의보기 컨트롤러에 액세스하려고합니까? 그리고 어떻게??

도움을 주시면 감사하겠습니다.

모센

답변

3

키 - 값 관찰을 사용하거나 (더 쉽게) 키 - 값 관찰을 고려해보십시오.

저는 UINavigationController 컨텍스트에서 컨트롤러 간 통신에 대해 누군가에게 조언을했습니다. 그 다음 오늘 오후에 KVO를 처음 시도했는데 돌아가서 다른 조언을해야했습니다. KVO는보기 계층에서 상황을 추적하는 것보다 간단합니다. 무엇을 관찰하는지 선언 한 다음 변경 알림을 수신하도록 설정합니다. 케이크 한 조각!

편집 :

알림 실제로, 아마 여기에 갈 수있는 방법입니다 - 당신은 당신의 다른 키에 대한 관찰자 하나를 등록 할 수있는 한 곳에서 인스턴스화 두 객체가 있다면,하지만 반드시 경우 그렇지 않은 경우입니다 템플릿으로 탭 표시 줄을 구성하고 있습니다.

알림. 하나의보기 컨트롤러를 알림 관찰자로 등록한 다음 다른보기 컨트롤러에서 알림을 시작하고 알림을 보낼 때 관찰자에게 알림을 보내는 것이 좋습니다. 귀하의 응용 프로그램이 전자 메일을 보내는 것과 조금 다릅니다.

ViewControllerOne.m :

-(void)viewDidLoad //a likely place, but not the only place you might do this 
{ 
    .... 
    // whatever else you're doing to initialize your VC, and then 

    [[NSNotificationCenter defaultCenter] 
     addObserver:self 
     selector:@selector(iWasNotified:) 
      name:@"myNotification" 
      object:nil]; 
} 

-(void)iWasNotified:(NSNotification *)notification 
{ 
    NSString *passedValue = (NSString *)notification.object; 
    NSLog(@"We got notified and received: %@", passedValue); 
} 

그리고 메시지를 보내는 것은이만큼 간단하다 :

ViewControllerTwo.m :

에 대한 등록 및 메시지를 수신은 다음과 같습니다

[[NSNotificationCenter defaultCenter] 
    postNotificationName:@"myNotification" 
       object:@"I'm passing you this NSString object!"]; 

분명히 문자열 i를 전달하는 것으로 제한되지 않습니다. n object: 필드. 좀 더 가능성이있는 사용은 self을 전달하는 것입니다. 그러면 알림 게시보기 컨트롤러의 공개 입력란에 액세스 할 수 있습니다.

그건 그것들의 기본 사용법입니다. 이 당신이 들어갈 수있는 더 많은 미묘한, 그리고 모두 여기에 놓인 : 미안 해요 , 나는 아주 새로운 아이폰 SDK 개발을 해요 ... http://developer.apple.com/iphone/library/documentation/cocoa/Conceptual/Notifications/Introduction/introNotifications.html

+0

답장을 보내 주셔서 감사를 많이하지만. 자세한 내용을 알려면 알림 및 알림 사용 방법을 알려주세요. 예제 코드를 제공 할 수 있습니까? 나는 정말로 감사 할 것입니다. 감사합니다. – mshaaban

+0

설명해 주셔서 감사합니다. 이제 알림 개념을 훨씬 더 잘 이해할 수있었습니다. 내 응용 프로그램의 경우에는 서로 다른 탐색 컨트롤러 스택에있는보기 컨트롤러간에 인스턴스 변수 데이터와 인스턴스 메서드를 공유해야하므로 두 뷰 컨트롤러 간의 상호 통신을위한 단일 클래스를 사용하게되었습니다. – mshaaban

+0

그런 경우 KVO가 더 좋은 방법 일 수 있습니다.특정 뷰 컨트롤러를 데이터 싱글 톤의 특정 필드에 옵저버로 등록하고 해당 필드가 변경 될 때 특정 메서드가 호출되도록 할 수 있습니다. 애플의 문서를 보면 매우 간단하다. –

관련 문제