2013-11-25 33 views
2

问题已解决!请参阅底部的代码。接收器MainVIewController没有segue iOS

我想在两个控制器之间传递一些数据。我有加载GoogleMap的MainViewController类。点击每个GMap标记的自定义信息窗口,我想打开新的窗口,并显示地点详情。 我的故事板: Storyboard

Segue公司被评为:showPlaceDetails:

Segue

几种方法写着:

- (void) mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker { 
    [self performSegueWithIdentifier:@"showPlaceDetails" sender: nil]; 
} 

(我还试图用sender: [marker snippet])。

我prepareForSegue方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showPlaceDetails"]) { 
     //[[segue destinationViewController] setDelegate:self]; 
     PlaceDetailsViewController *destViewController = segue.destinationViewController; 
     //Pass some data 
    } 
} 

但我得到的消息: 终止应用程序由于未捕获的异常 'NSInvalidArgumentException',原因: '接收器(RelaxInKZViewController)具有标识符没有赛格瑞 'showPlaceDetails''

我做下列步骤操作:

  1. 添加新的视图控制器上STOR yboard。
  2. 添加名为PlaceDetailsViewController的Objective-C类。
  3. 更改自定义类新加入的VC为“PlaceDetailsViewController”
  4. 添加该代码
  5. 清除模拟器的数据和清洁工程

并没有什么。我希望你能帮助我:) Thx,Artem。


Mr_bem一直劝我拒绝塞格斯和使用pushViewController方法。这很好!

UIStoryboard *iPhoneStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 
    PlaceDetailsViewController *destViewController = [iPhoneStoryboard instantiateViewControllerWithIdentifier:@"PlaceDetailsViewController"]; 
    destViewController.placeData = marker.placeData; 
    [self.navigationController pushViewController:destViewController animated:NO]; 

回答

3

您使用的是推SEGUE,这只能是一个navigationController进行,如:

[self.navigationController performSegueWithIdentifier:@"showPlaceDetails" sender: nil]; 

注意您应该将视图控制器,是推动一个前有一个导航控制器。

或者,如果你愿意,你可以改变它的类型为Modal,一切都应该为你工作大(Y)

UPDATE

好了,这里是我的建议,删除SEGUE,使您PlaceDetailsViewController到PlaceDetailsViewController来自IB的storyboardID,并添加以下代码,而不是

- (void) mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker { 
     PlaceDetailsViewController *destViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PlaceDetailsViewController"]; 
[self.navigationController pushViewController:destViewController animated:YES] 
se 
    } 

此必须努力!大声笑!

+0

您是否已将navigationController添加到您的storyBoard中,然后使RelaxInKZViewController成为其根视图控制器?如果你这样做,我提供的代码应该工作..或者只是改变模式的segue的类型。 是的,你在做什么是正确的,只是一个小错误,一旦修复,它应该是真棒! – Albara

+0

按住控制键,然后从导航控制器拖动到您的RelaxInKZViewController,然后选择赛格类型“根控制器”。这就是它,使用我的答案中提供的代码,你应该很好(Y) – Albara

+0

尝试删除'.navigationController'? – Albara

0

您需要在UINavigationController中嵌入您的RelaxInKZViewController才能使用pushsegue。从顶部的菜单中选择RelaxInKZViewController->Editor->Embed In->Navigation Controller。我认为这会解决你的问题。

+0

错误仍然存​​在:(http://s18.postimg.org/eo85ky76h/2013_11_25_14_34_32.png - 它现在是我的故事板 –

+0

尝试清理项目并运行再次也重置模拟器设置 – suhit

+0

没有什么变化 –