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
相关产品推荐
相关产品推荐

