2015-01-31 2 views
0

여기 내 테이블 뷰 컨트롤러입니다. 클래스의 mapSearch 배열을 전달할 것이라고 선언했습니다.테이블 뷰에서 맵 뷰로 장소 배열 전달

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     tableView.deselectRowAtIndexPath(indexPath, animated: true) 


    let selectedMap = mapSearch[indexPath.row] 

    let mapviewDestination = MapViewController() 
    mapviewDestination.mapString = selectedMap 

    performSegueWithIdentifier("showDetails", sender: tableView) 


} 

다음은 내 mapViewController 코드입니다.

var mapString : String? 

실제 검색.

var request = MKLocalSearchRequest() 
    request.naturalLanguageQuery = mapString 
    request.region = self.placeMap.region 
    var search:MKLocalSearch = MKLocalSearch.init(request: request) 
    search.startWithCompletionHandler { 
     (response:MKLocalSearchResponse!, error:NSError!) in 
     if !(error != nil) { 
      var placemarks:NSMutableArray = NSMutableArray() 
      for item in response.mapItems { 
       placemarks.addObject((item as MKMapItem).placemark) 
      } 
      self.placeMap.removeAnnotations(self.placeMap.annotations) 
      self.placeMap.showAnnotations(placemarks, animated: true) 
     } else { 

     } 
    } 

내 문제는 내가 시뮬레이터를 실행할 때 mapString을 기반으로 검색하지 않는다는 것입니다.

모든 아이디어를 환영합니다!

편집 : 나는 이것과 행운을 시도하고있다

:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let cell = tableView.cellForRowAtIndexPath(indexPath) 
    tableView.deselectRowAtIndexPath(indexPath, animated: true) 

    let selectedMap = mapSearch[indexPath.row] 

    performSegueWithIdentifier("showDetails", sender: self) 


} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if segue.identifier == "showDetails" { 
     var mapController = segue.destinationViewController as MapViewController 
     mapController.mapString = mapSearch 
     } 
} 

답변

1

당신이 출시 파괴되지 않는 당신의 didSelectRowAtIndexPathmapviewDestination 하시겠습니까? 그것을 mapString으로 지정하고 있지만 아무 것도하지 않습니다.

실제로는 mapString을 설정하지 않았으므로 검색이 nil (또는 빈) 문자열에 대해 수행됩니다.

segues를 사용하여 두보기 컨트롤러간에 데이터를 전달해야하는 경우 UIViewControllerprepareForSegue:sender:을 사용해야합니다 (현재보기 컨트롤러에서 다시 구현하기 만하면됩니다). 화면에 표시되기 직전에 구성 할 수있는 제공된보기 제어기에 대한 포인터를 제공합니다.

+0

prepareForSegue가 배열의 모든 값을 전송하지 않습니까? 선택한 tableview의 값을 mapView에 보내고 싶습니다. – Shack

+0

'prepareForSegue'는 Segue를 사용하여 새로 푸시/제시된 뷰 컨트롤러의 맞춤 구성을 수행하기 위해 Apple에서 제공하는 메소드입니다. 일반적으로 식별자를 사용하여 Segue를 수행하고 새 View Controller에 대한 참조를 가져 와서 PrepForSegue를 구현 한 다음 사용자 정의 속성을 설정합니다. 그렇게하면 이미 설정된 모델로 푸시/표시됩니다. –

+0

컨트롤러에 대한 참조가'didSelectRowAtIndexPath'의 끝에서 사라 지므로, 마치 MapViewController를 인스턴스화 할 수 없다는 것이 문제입니다. 실제로 mapString을 전달하고 있지만 구성된 전체보기 컨트롤러는 나중에 삭제됩니다. Segue가 View Controller를 인스턴스화하고'prepareForSegue'에서 설정을 처리하도록해야합니다. 희망이 도움이됩니다. –