1

我对 iOS 开发人员相对较新,并且对使用 Google Maps API 完全陌生。

我有两个单独的视图,我想要一个地图视图。第一个是允许您在地图上查找位置、输入地址或使用当前位置的场景。在下一个场景中,我想使用与用户从上一个场景输入的位置相同的位置,但我想使用卫星视图而不是常规地图,并且会有一些额外的工具来操作地图以达到目的我的应用程序。

我需要有两个独立的场景,因为界面非常不同,但是我无法将信息从一个地图视图发送到另一个。这是我尝试过的一些方法(其中两个被注释掉了):

- (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”

对于前两个注释掉的方法,我认为在加载下一个场景时,我分配给下一个视图的数据正在被删除。我不确定我当前的代码有什么问题。

谁能指出我正确的方向,以便使用当前场景的数据在下一个场景中生成 mapView?谢谢。

4

1 回答 1

3

我不认为你应该在两个控制器之间传递 UI。您应该只将非 UI 数据传递给您的第二个控制器。特别是您的 UI 数据可能很弱,可能会变为 nil。此外,prepareForSegue在加载第二个控制器的视图之前发生,您传递给第二个控制器的任何 UI 数据都不会被设置。

之间传递数据的正确方法是传递非 UI 数据。例如,如果你UITextView在你的第一个控制器中有一个,你不应该这样做secondController.textView = firstController.textView;,相反,你应该传递非 UI 属性。所以你需要NSString *myText;在你的控制器中做一个,然后你可以secondController.myText = self.myText;在你的第一个控制器的prepareForSegue方法中做。当你的第二个控制器的视图被加载(你的 UITextView 将被加载)viewWillLoad()viewDidLoaded()方法时,你可以在你的第二个控制器中使用 myText 数据设置你的 UITextView:self.textView = myText

在你的情况下,你不应该将mapView你的第一个控制器传递给第二个控制器,你应该声明变量来保存你mapView的第二个控制器,然后你可以将非 UI mapView 属性数据传递给你的第二个控制器中的强变量。

于 2015-02-09T22:08:38.873 回答