我是iOS开发人员的新手,也是使用Google Maps API的新手。
我有两个单独的视图,我想要一个mapview。第一个场景是允许您在地图上找到位置,输入地址或使用当前位置的场景。在下一个场景中,我想使用用户从上一个场景输入的相同位置,而不是我要使用卫星视图的常规地图,并且将有一些其他工具来操纵地图以达到目的我的应用程序
我需要有两个单独的场景,因为界面非常不同,但是我无法将信息从一个mapview发送到另一个mapview。这是我尝试过的几种方法(已注释掉两种):
- (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吗?谢谢。
我不认为您应该在两个控制器之间传递UI。您应该只将非UI数据传递给第二个控制器。特别是您的UI数据可能很弱,可能会变为零。此外,prepareForSegue
发生在加载第二个控制器的视图之前,将不会设置传递给第二个控制器的任何UI数据。
之间传递数据的正确方法是传递非UI数据。例如,如果您UITextView
的第一个控制器中有一个,则不应这样做secondController.textView = firstController.textView;
,而应传递非UI属性。因此,您需要NSString *myText;
在控制器中创建一个,然后才能secondController.myText = self.myText;
在第一个控制器的prepareForSegue
方法中进行操作。当在viewWillLoad()
或viewDidLoaded()
方法中加载第二个控制器的视图(将加载UITextView)时,可以在第二个控制器中使用myText数据设置UITextView:self.textView = myText
在您的情况下,您不应mapView
将第一个控制器的传递给第二个控制器,而应声明变量将其保留mapView
在第二个控制器中,然后可以将非UI mapView属性数据传递给第二个控制器中的强变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句