PrepareForSegue 方法使应用程序 iOS 崩溃
Posted
技术标签:
【中文标题】PrepareForSegue 方法使应用程序 iOS 崩溃【英文标题】:PrepareForSegue method crashes app iOS 【发布时间】:2016-02-18 13:02:07 【问题描述】:我有一个UIButton
,当我单击它时,它会推送另一个视图控制器,但它会在此处崩溃
textViewController.message = self.selectedMessage;
带有错误设置消息。
这是我的按钮,其中包含崩溃的代码和方法:
- (IBAction)image:(id)sender
[self performSegueWithIdentifier:@"image" sender:self];
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"showLogin"])
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
else
[segue.identifier isEqualToString:@"showImage"];
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
ImageViewController *imageViewController = (ImageViewController *)segue.destinationViewController;
imageViewController.message = self.selectedMessage;
如何修复PrepareForSegue
方法,以便在按下按钮时可以转到下一个VC。我设置了异常断点,它在imageViewController.message = self.selectedMessage;
处崩溃。当我评论这条线时,一切正常。
【问题讨论】:
你确定destinationViewController 真的是ImageViewController 类型而不是UINavigationController? 你怎么能确定?如果它崩溃并且找不到消息属性的选择器,那么它不是 ImageViewController。 请参阅下面的答案以进行修复 发布完整的崩溃日志。 如果标识符是image
为什么要与showImage
比较。检查你的 else 结构不好。应该是else if ([segue.identifier isEqualToString:@"image"])
。请添加完整的崩溃日志
【参考方案1】:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"showLogin"])
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
else
ImageViewController *imageViewController = (ImageViewController *)segue.destinationViewController;
[imageViewController setHidesBottomBarWhenPushed:YES];
imageViewController.message = self.selectedMessage;
试试这个。
【讨论】:
不工作这是错误 [ViewController setMessage:]: unrecognized selector sent to instance 0x155f95e60 显示 Imageviewcontroller 的 message 属性。 . . .错误在那里@Joey121 删除一条无用的行如何防止它崩溃?如果找不到选择器,则destinationViewController 不是 ImageViewController。 请检查您创建的故事板中的segue。 . .it 没有指向 imageviewcontroller。或者您的标识符未设置为 segue 到 imageviewcontroller 查看我的答案以进行修复【参考方案2】:- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"showLogin"])
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
else
[segue.identifier isEqualToString:@"showImage"];
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
ImageViewController *imageViewController = (ImageViewController *)segue.destinationViewController;
imageViewController.message = self.selectedMessage;
必须改成这个才能正常工作
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"showLogin"])
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
else if ([segue.identifier isEqualToString:@"showImage"])
[segue.destinationViewController setHidesBottomBarWhenPushed:YES];
ImageViewController *imageViewController = (ImageViewController *)segue.destinationViewController;
imageViewController.message = self.selectedMessage;
【讨论】:
以上是关于PrepareForSegue 方法使应用程序 iOS 崩溃的主要内容,如果未能解决你的问题,请参考以下文章
prepareForSegue 是在视图控制器之间传递值的正确方法吗
如何在 iOS 中的 prepareForSegue 之前执行按钮按下操作?
UITableViewControllers 上的 prepareforSegue 方法
对 UITableView 使用 didSelectRowAtIndexPath 或 prepareForSegue 方法?