将参数传递给另一个视图控制器时出现异常
昨晚我让一个项目工作。将参数传递给另一个视图控制器时出现异常
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"nuevo_servicio_segue"])
{
NSLog(@"estoy en segue pasando a nuevo servicio");
// Get reference to the destination view controller
NuevoServicioViewController *vc = [segue destinationViewController];
//pasamos la latitud del PO
//la convertimos a String
NSString *latitud = [NSString stringWithFormat:@"%.20f", self.puntoOrigen.latitude];
vc.parametro_origin_latitude = latitud;
//lo comprobamos
NSLog(@"LATITUD DEL PO PASADA=%@",latitud);
//pasamos la lONGITUD del PO
//la convertimos a String
NSString *longitud = [NSString stringWithFormat:@"%.20f", self.puntoOrigen.longitude];
vc.parametro_origin_longitude = longitud;
//lo comprobamos
NSLog(@"LONGITUD DEL PO PASADA=%@",longitud);
}
}
唯一的例外是在线路:今天上午没有变化,同一个项目,在这个方法抛出异常
vc.parametro_origin_latitude = latitud;
和
vc.parametro_origin_longitude = longitud;
如果我评论两条线的应用不会崩溃,而且我完全确信我没有更改任何代码。
我需要你的帮助来理解它。
编辑:
异常
2015-03-13 10:00:57.816 ABC[1358:29933] estoy en segue pasando a nuevo servicio
2015-03-13 10:00:57.816 ABC[1358:29933] -[UINavigationController setParametro_origin_latitude:]: unrecognized selector sent to instance 0x80ce83b0
2015-03-13 10:00:57.819 ABC[1358:29933] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController setParametro_origin_latitude:]: unrecognized selector sent to instance 0x80ce83b0'
*** First throw call stack:
(
0 CoreFoundation 0x00c15946 __exceptionPreprocess + 182
1 libobjc.A.dylib 0x0089ea97 objc_exception_throw + 44
2 CoreFoundation 0x00c1d5c5 -[NSObject(NSObject) doesNotRecognizeSelector:] + 277
3 CoreFoundation 0x00b663e7 ___forwarding___ + 1047
4 CoreFoundation 0x00b65fae _CF_forwarding_prep_0 + 14
5 ABC 0x0005723d -[MainViewController prepareForSegue:sender:] + 445
6 UIKit 0x017f9b37 -[UIStoryboardSegueTemplate _perform:] + 199
7 UIKit 0x0133681c -[UIViewController performSegueWithIdentifier:sender:] + 72
8 ABC 0x00056eb9 -[MainViewController boton_solicitar_action:] + 1001
9 libobjc.A.dylib 0x008b47cd -[NSObject performSelector:withObject:withObject:] + 84
10 UIKit 0x011de23d -[UIApplication sendAction:to:from:forEvent:] + 99
11 UIKit 0x011de1cf -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 64
12 UIKit 0x01311e86 -[UIControl sendAction:to:forEvent:] + 69
13 UIKit 0x013122a3 -[UIControl _sendActionsForEvents:withEvent:] + 598
14 UIKit 0x0131150d -[UIControl touchesEnded:withEvent:] + 660
15 UIKit 0x0122e60a -[UIWindow _sendTouchesForEvent:] + 874
16 UIKit 0x0122f0e5 -[UIWindow sendEvent:] + 791
17 UIKit 0x011f4549 -[UIApplication sendEvent:] + 242
18 UIKit 0x0120437e _UIApplicationHandleEventFromQueueEvent + 20690
19 UIKit 0x011d8b19 _UIApplicationHandleEventQueue + 2206
20 CoreFoundation 0x00b391df __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
21 CoreFoundation 0x00b2eced __CFRunLoopDoSources0 + 253
22 CoreFoundation 0x00b2e248 __CFRunLoopRun + 952
23 CoreFoundation 0x00b2dbcb CFRunLoopRunSpecific + 443
24 CoreFoundation 0x00b2d9fb CFRunLoopRunInMode + 123
25 GraphicsServices 0x02d9924f GSEventRunModal + 192
26 GraphicsServices 0x02d9908c GSEventRun + 104
27 UIKit 0x011dc8b6 UIApplicationMain + 1526
28 ABC 0x00066e5d main + 141
29 libdyld.dylib 0x0366dac9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
错误是告诉你,你要设置不具有这些属性导航控制器上的一些价值观。 segue的目标视图控制器必须是导航控制器,因此您需要获取其topViewController以访问您的自定义控制器。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"nuevo_servicio_segue"])
{
NSLog(@"estoy en segue pasando a nuevo servicio");
// Get reference to the destination view controller
UINavigationController *nav= segue.destinationViewController;
NuevoServicioViewController *vc = nav.topViewController;
//pasamos la latitud del PO
//la convertimos a String
NSString *latitud = [NSString stringWithFormat:@"%.20f", self.puntoOrigen.latitude];
vc.parametro_origin_latitude = latitud;
//lo comprobamos
NSLog(@"LATITUD DEL PO PASADA=%@",latitud);
//pasamos la lONGITUD del PO
//la convertimos a String
NSString *longitud = [NSString stringWithFormat:@"%.20f", self.puntoOrigen.longitude];
vc.parametro_origin_longitude = longitud;
//lo comprobamos
NSLog(@"LONGITUD DEL PO PASADA=%@",longitud);
}
}
该Segue来自MainViewController,该方法是,并转到嵌入NuevoServicioViewController的导航控制器。 – user4619034 2015-03-13 16:20:06
我已经删除了导航控制器,并将segue直接放到视图控制器,现在它可以工作,但我必须说我不记得今天将其与导航控制器一起嵌入:),谢谢rdelmar – user4619034 2015-03-13 16:27:54
@ user4619034,工作得太迟到深夜? – rdelmar 2015-03-13 16:28:54
你得到了什么异常?发布实际的错误消息。 – rdelmar 2015-03-13 16:10:03
这两个属性vc.parametro_origin_latitude和vc.parametro_origin_longitude是字符串? – LoVo 2015-03-13 16:10:12
@rdelmar,例外发布 – user4619034 2015-03-13 16:11:25