You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Segue跳转崩溃:调用未识别的setPassingK3:方法问题排查

问题解决:Segue触发时因未识别选择器崩溃

崩溃原因分析

你的prepareForSegue方法存在语法错误:第二个if语句的代码块没有正确包裹在if条件范围内。不管当前触发的Segue是不是segueToK3,那个包含destination.passingK3=_passingK1;的代码块都会执行。

当你触发SegueToK2时,程序会错误地将目标控制器ABGPotassiumViewController2强制转换为ABGPotassium3ViewController,然后尝试调用setPassingK3:方法,但ABGPotassiumViewController2根本没有这个属性的setter方法,直接导致崩溃。

修复后的代码

修改prepareForSegue方法,把segueToK3的逻辑完整包裹在if的大括号内:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([[segue identifier] isEqualToString:@"SegueToK2"])
    {  //segue alla view potassio2
        ABGPotassiumViewController2 *destination=[segue destinationViewController];
        {   
            destination.passingK2=_passingK1;
            destination.passingLanguageK2=_passingLanguage2;
            destination.Therapy1=[NSString stringWithFormat:@"\nSomministra in bolo ev Calcio Gluconato 1 g (10 ml di soluzione al 10%%)\n"];
            destination.Therapy2=[NSString stringWithFormat:@"\nRipeti ECG dopo 5 minuti\n"];
            destination.Therapy3=[NSString stringWithFormat:@"\nSe persistono le alterazioni dell'ECG somministra altro calcio gluconato\n"];
        }
    }
    //segue alla view potassio3
    if([[segue identifier] isEqualToString:@"segueToK3"])
    {
        NSLog(@"sono arrivato a segue k3");
        ABGPotassium3ViewController *destination=[segue destinationViewController];
        {
            destination.passingK3=_passingK1;
        }
    }
}

关键说明

  • Objective-C中,if语句如果没有用大括号包裹,只会执行紧跟在条件后的那一行代码。后面独立的大括号块属于全局执行的代码,不受if条件约束。
  • 修复后,只有当Segue标识符是segueToK3时,才会执行转换控制器并赋值passingK3的逻辑,触发SegueToK2时不会再执行这段错误代码。

内容的提问来源于stack exchange,提问作者marco.merci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 12:19:58