2017-02-04 4 views
0

私はスレッドを読んでいた:IBOutlet of another view controller is nilアクセス

私はそれに非常に似た問題を抱えています。

RequestViewController

class DenunciasResueltasViewController: UIViewController { 

    @IBOutlet var mapView: GMSMapView! 
    var solicitudes = [SolicitudesModel]() 
    var tempMap: GMSMapView! 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      let camera = GMSCameraPosition.camera(withLatitude: 3.4824182, longitude: -8.1776567, zoom: 15) 
      self.mapView.camera = camera 
    } 

func recenterMap(latitude:Float!, longitude:Float!) -> Void { 

     let coordinates = CLLocationCoordinate2DMake(CLLocationDegrees(latitude), CLLocationDegrees(longitude)) 
     mapView = tempMap 
     self.mapView.animate(toLocation: coordinates) 
    } 

RequestTableViewController

class RequestTableViewController: UITableViewController { 
     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

//Some code to fill the table 


     let viewController = self.storyboard?.instantiateViewController(withIdentifier: "RequestVC") as! RequestViewController 
     viewController.recenterMap(latitude: solicitudes[indexPath.row].getLatitude(), longitude: solicitudes[indexPath.row].getLongitude()) 

     return cell 
    } 
} 

両方のコンポーネントは、実行時に同時に初期化され、私は意味、両方が同じビューの一部です。

そしてユーザーが、私はそのresasonためmapView

を更新したい「行」をクリックしたときに、私はこの方法を使用している「RecenterMap」

しかし、変数「self.mapView」は常に '無し'。 この値はどのように更新できますか?

+0

CLCoordinateプロパティを設定すると、マップをどこに配置するか、viewcontrollerを作成するときに設定したり、viewDidLoafで表示されたり表示されたりすると、その値に対して 'recenterMap()'が呼び出されます。 – Larme

答えて

0

ユーザーがセルをタップしたときに呼び出されるため、デリゲートメソッドdidSelectRowAtIndexPathを使用して、再センタリングを実行する必要があります。 2番目のビューコントローラがそのセルを塗りつぶし始めたときに、最初のビューコントローラのアウトレットがまだ設定されていない可能性があります。

0

これは一般的な問題です。現在提示されていないvcのプロパティにアクセスしたい場合は、その前に表示してください。

あなたは、そのビューにアクセスすることによって構築されるようにビュー階層を強制することにより、それを解決することができます。この後

let _ = viewController.view 

あなたはViewControllerを上の任意のビュー関連プロパティにアクセスするのは自由です。あなたが呼び出す前にそれを置く必要があります.recenterMap

0

あなたは何をしようとしていますか:あなたのコードは各テーブルセルのマップでビューコントローラをインスタンス化するようですが、実際にインスタンス化した後では表示しません。

RequestViewControllerをインスタンス化しますが、ビュー階層には表示されません。したがって、IBOutletプロパティは呼び出すときにインスタンス化されません。通常、UIViewControllerviewを呼び出すと、その上のすべてのアウトレットがインスタンス化されます。 また、self.present(requestViewController)を呼び出して提示することもできます。

0

何私が理解することは、マップ機能上の

1 - あなたの中心が、デリゲートメソッドで呼び出される必要がある、両方の親ビューのサブビューです、あなたはRequestViewControllerとRequestTableViewControllerの両方を持っている、ということである:

didSelectRowAtIndexPath: 

2 RequestViewControllerへの参照が必要です。ストーリーボードからの情報の読み込みを行わないでください。と表示されます。新しいインスタンスが表示され、既に表示されているインスタンスは表示されません。