将params传递给另一个视图控制器时出现异常

时间:2015-03-13 16:06:13

标签: ios

昨晚我让一个项目正常运作。今天早上没有任何更改的同一个项目会在此方法中引发异常:

- (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

1 个答案:

答案 0 :(得分:1)

错误告诉您正在尝试在没有这些属性的导航控制器上设置某些值。 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);

        }
    }