Receiver MainVIewController 没有 segue iOS

Posted

技术标签:

【中文标题】Receiver MainVIewController 没有 segue iOS【英文标题】:Receiver MainVIewController has no segue iOS 【发布时间】:2013-11-25 10:20:11 【问题描述】:

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

我想在 2 个控制器之间传递一些数据。我有加载 GoogleMap 的 MainViewController 类。单击每个 GMap 标记的自定义信息窗口时,我想打开包含地点详细信息的新窗口。 我的故事板是:

Segue 被命名为:showPlaceDetails:

写了几个方法:

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

我做了这些步骤:

    在情节提要上添加新的视图控制器。 添加名为 PlaceDetailsViewController 的 Objective-C 类。 将新增VC的自定义类改为“PlaceDetailsViewController” 添加该代码 清除模拟器的数据并清理项目

什么都没有。我希望你能帮帮我 :) 谢谢,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];

【问题讨论】:

【参考方案1】:

您正在使用 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
    

这必须有效!哈哈!

【讨论】:

您是否将navigationController 添加到您的storyBoard,然后将RelaxInKZViewController 设为其根视图控制器?如果你这样做了,我提供的代码应该可以工作。或者只是将 segue 的类型更改为模态。是的,你所做的是正确的,只是一个小错误,一旦修复,它应该很棒! 按住控制键,然后从导航控制器拖动到您的 RelaxInKZViewController,然后选择 segue 类型“根控制器”。就是这样,使用我的答案中提供的代码,你应该很高兴(Y) 尝试删除'.navigationController'? 太棒了!其实是一样的。您只是在以编程方式创建一个 segue... 很高兴我提供了帮助 :)【参考方案2】:

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

【讨论】:

错误仍然存​​在 :( s18.postimg.org/eo85ky76h/2013_11_25_14_34_32.png - 现在是我的故事板了。 尝试清理项目并再次运行也会重置模拟器设置。 此链接可能对您有所帮助***.com/questions/11874200/… 尝试删除segue并重新添加。或者你在 didTapInfoWindowOfMarker: 方法中使用 [self.navigationController pushViewController:animated:] 方法来推送下一个视图控制器,它不需要 segue。

以上是关于Receiver MainVIewController 没有 segue iOS的主要内容,如果未能解决你的问题,请参考以下文章

BroadCast Receiver的使用

UITableViewController 不显示

我应该把啥作为 cast.receiver.RemoteMedia.NAMESPACE?

Spark Streaming源码解读之Receiver在Driver详解

Django - % url facebook_xd_receiver % 的问题

使用Receiver接收告警信息