Receiver MainVIewController没有segue iOS

时间:2013-11-25 10:20:11

标签: ios segue

问题解决了!请参阅底部的代码。

我想在两个控制器之间传递一些数据。我有加载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'而终止应用程序,原因:'Receiver(RelaxInKZViewController)没有带标识符的segue'showPlaceDetails''

我做了以下步骤:

  1. 在故事板上添加新视图控制器。
  2. 添加名为PlaceDetailsViewController的Objective-C类。
  3. 将新添加的VC的自定义类更改为“PlaceDetailsViewController”
  4. 添加该代码
  5. 清除模拟器的数据和清理项目
  6. 没什么。我希望你能帮帮我 :) Thx,Artem。


    Mr_bem建议我拒绝segues并使用pushViewController方法。很好!

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

2 个答案:

答案 0 :(得分:3)

您正在使用Push segue,这只能使用navigationController执行,例如:

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

请注意,在ViewController之前应该有一个导航控制器,即推送控制器。

或者如果你愿意,你可以将它的类型更改为模态,一切都应该适合你(Y)

<强>更新

好的,这是我的建议,删除segue,将PlaceDetailsViewController的storyboardID从IB放到PlaceDetailsViewController,然后添加此代码

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

这必须工作! LOL!

答案 1 :(得分:0)

您需要将RelaxInKZViewController嵌入UINavigationController内以使用push segue。选择RelaxInKZViewController-&gt;从顶部菜单中选择Editor->Embed In->Navigation Controller。我想这会解决你的问题。