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的主要内容,如果未能解决你的问题,请参考以下文章
我应该把啥作为 cast.receiver.RemoteMedia.NAMESPACE?
Spark Streaming源码解读之Receiver在Driver详解