1

私はiOS開発に比較的慣れておらず、Google Maps APIを使用するのはまったく初めてです。

マップビューが必要な2つの別々のビューがあります。1 つ目は、地図上で場所を検索したり、住所を入力したり、現在地を使用したりできるシーンです。次のシーンでは、前のシーンでユーザーが入力したのと同じ場所を使用したいのですが、通常の地図ではなく航空写真を使用したいと考えています。また、目的に合わせて地図を操作するための追加ツールがいくつかあります。私のアプリの。

インターフェイスが大きく異なるため、2 つの別個のシーンが必要ですが、あるマップビューから別のマップビューに情報を送信するのに問題があります。これが私が試したいくつかの方法です(2つはコメントアウトされています):

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showServiceArea"]) {
    ServiceAreaViewController *destViewController = segue.destinationViewController;
    destViewController.camera = [GMSCameraPosition cameraWithLatitude:curLocation.location.coordinate.latitude longitude:curLocation.location.coordinate.longitude zoom:17]; //Setting up a camera in the next scene using the curLocation coordinates from the current view
    //destViewController.view = _mapView;  //Setting the next view controller's view to the current mapView and changing the mapType to satellite
    //_mapView.mapType = kGMSTypeSatellite;
    //destViewController.serviceAreaMapView = _mapView;  //copying the current mapview to a mapview on the next scene
    //destViewController.serviceAreaMapView.mapType = kGMSTypeSatellite;
}

}

私が試したすべての方法で例外がスローされ、アプリがクラッシュしました。上記のコードのクラッシュからの出力は次のとおりです。

キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[UIViewController setCamera:]: 認識されないセレクターがインスタンス 0x17e73eb0 に送信されました'

コメントアウトされた最初の 2 つのメソッドについては、次のシーンが読み込まれるまでに、次のビューに割り当てたデータが削除されていることがわかりました。現在のコードの何が問題なのかわかりません。

現在のシーンのデータを使用して、次のシーンで mapView を生成するために正しい方向に私を向けることができますか? ありがとう。

4

1 に答える 1

3

2 つのコントローラー間で UI を渡す必要はないと思います。非 UI データのみを 2 番目のコントローラーに渡す必要があります。特にあなたのUIデータはおそらく弱く、おそらくnilになるでしょう. さらに、prepareForSegue2 番目のコントローラーのビューが読み込まれる前に発生し、2 番目のコントローラーに渡す UI データは設定されません。

間でデータを渡す正しい方法は、非 UI データを渡すことです。たとえば、UITextView最初のコントローラーに がある場合、 を実行するsecondController.textView = firstController.textView;のではなく、非 UI 属性を渡す必要があります。したがって、コントローラーで a を作成する必要があり、最初のコントローラーのメソッドでNSString *myText;行うことができます。2 番目のコントローラーのビューがまたはメソッドに読み込まれると (UITextView が読み込まれます) 、2 番目のコントローラーで myText データを使用して UITextView を設定できます。secondController.myText = self.myText;prepareForSegueviewWillLoad()viewDidLoaded()self.textView = myText

あなたの場合、mapView最初のコントローラーから 2 番目のコントローラーに渡すべきではありません。2 番目のコントローラーで保持する変数を宣言する必要がありますmapView。次に、UI 以外の mapView 属性データを 2 番目のコントローラーの強力な変数に渡すことができます。

于 2015-02-09T22:08:38.873 に答える