2010-05-25 4 views
0

두 개의보기가 있는데 첫 번째보기에는 ridesMap이라는 MKMapView가 있습니다. 두 번째 뷰는 UITableView가있는 뷰입니다. 두 번째보기에서 저장 버튼을 클릭하면 처음보기에서 메소드를 호출 :iPhone : 다른보기에서 호출 할 때 addAnnotation이 작동하지 않습니다.

// Get my first views class 
MyRidesMapViewController *rideMapView = [[MyRidesMapViewController alloc] init]; 
// Call the method from my first views class that removes an annotation 
[rideMapView addAnno:newRidePlacemark.coordinate withTitle:rideTitle.text withSubTitle:address]; 

이 제대로 호출처럼 보이는 addAnno 방법에있어서,

- (void)addAnno:(CLLocationCoordinate2D)anno withTitle:(NSString *)annoTitle withSubTitle:(NSString *)subTitle { 

    Annotation *ano = [[[Annotation alloc] init] autorelease]; 

    ano.coordinate = anno; 

    ano.title = annoTitle; 

    ano.subtitle = subTitle; 

    if ([ano conformsToProtocol:@protocol(MKAnnotation)]) { 

     NSLog(@"YES IT DOES!!!"); 

    } 

    [ridesMap addAnnotation:ano]; 

}//end addAnno 

이 방법은 주석을 생성 MKAnnotation에 준거하고, addAnnotation 메소드를 사용해 맵에 그 주석을 추가한다고 생각합니다. 그러나 주석은 절대로 추가되지 않습니다.

주석을 추가하지 않을 때 오류가 발생하지 않습니다. 그러나 메서드가 호출 될 때 나타나지 않습니다.

왜 이렇게 될까요? 그것은 모든 것을 올바르게 수행 한 것, 그리고 올바른 MKAnnotation을 addAnnotation 메서드에 전달하고있는 것 같습니다. 그래서, 왜 핀을 떨어 뜨리지 않는지 모르겠다. 이 메서드를 다른 뷰에서 호출하기 때문에이 코드를 사용할 수 있습니까? 그게 왜 중요할까요?

답변

2

MyRidesMapViewController의 두 번째 인스턴스를 만듭니다. 어노테이션을 원래 인스턴스에 추가해야합니다. 인스턴스를 두 번째보기로 전달하는 방법을 제공해야합니다. 이렇게하는 방법에는 여러 가지가 있습니다. 최적의 선택은 앱이 어떻게 구성되어 있는지에 달려 있습니다 (모름).

+0

내 앱은 탭 막대 컨트롤러를 사용합니다. 내지도보기의 경우 탭 중 하나입니다. 이 탭에는 모달보기를 보여주는 단추가 있는데, 내지도보기 위에 열립니다. 이 두 번째 뷰에서 스택의 맨 아래에있는 mapview로 주석과 주석을 제거하는 메서드를 호출해야합니다. –

+0

지도보기 컨트롤러를 찾으려면 UITabViewController의 viewControllers 속성을 검색하여 선택하십시오. self.tabBarController.selectedViewController = mapViewController; –

관련 문제