Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios为导致崩溃的segue做好准备_Ios_Objective C - Fatal编程技术网

ios为导致崩溃的segue做好准备

ios为导致崩溃的segue做好准备,ios,objective-c,Ios,Objective C,我是ios开发的新手,我的努力遇到了困难 我的方法中有一段代码,用于将一个特定的NSObject从这个视图传递到下一个视图,但是它一直在破坏我的应用程序 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if([segue.identifier isEqualToString:@"showPDF"]){ UINavigationController *navController = (UINaviga

我是ios开发的新手,我的努力遇到了困难

我的方法中有一段代码,用于将一个特定的NSObject从这个视图传递到下一个视图,但是它一直在破坏我的应用程序

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"showPDF"]){
    UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
    PDFViewController *controller = (PDFViewController *)navController.topViewController;
    controller.yourName = self.yourName;
}
我已经调试通过,并已确定这是第四行导致它崩溃

输出:

2015-06-19 11:47:00.955 iOSPDFRenderer[2455:70005] -[PDFViewController topViewController]: unrecognized selector sent to instance 0x7c5375d0
2015-06-19 11:47:00.959 iOSPDFRenderer[2455:70005] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PDFViewController topViewController]: unrecognized selector sent to instance 0x7c5375d0'
*** First throw call stack:
(
    0   CoreFoundation                      0x01f2b466 __exceptionPreprocess + 182
    1   libobjc.A.dylib                     0x01bb4a97 objc_exception_throw + 44
    2   CoreFoundation                      0x01f332c5 -[NSObject(NSObject) doesNotRecognizeSelector:] + 277
    3   CoreFoundation                      0x01e7bbc7 ___forwarding___ + 1047
    4   CoreFoundation                      0x01e7b78e _CF_forwarding_prep_0 + 14
    5   iOSPDFRenderer                      0x000ed00e -[ViewController prepareForSegue:sender:] + 238
    6   UIKit                               0x00985d77 -[UIStoryboardSegueTemplate _perform:] + 199
    7   UIKit                               0x00985e05 -[UIStoryboardSegueTemplate perform:] + 116
    8   libobjc.A.dylib                     0x01bca7cd -[NSObject performSelector:withObject:withObject:] + 84
    9   UIKit                               0x00368340 -[UIApplication sendAction:to:from:forEvent:] + 99
    10  UIKit                               0x003682d2 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 64
    11  UIKit                               0x0049ca56 -[UIControl sendAction:to:forEvent:] + 69
    12  UIKit                               0x0049ce73 -[UIControl _sendActionsForEvents:withEvent:] + 598
    13  UIKit                               0x0049c0dd -[UIControl touchesEnded:withEvent:] + 660
    14  UIKit                               0x003b8ffa -[UIWindow _sendTouchesForEvent:] + 874
    15  UIKit                               0x003b9ad5 -[UIWindow sendEvent:] + 791
    16  UIKit                               0x0037ebb1 -[UIApplication sendEvent:] + 242
    17  UIKit                               0x0038ebf6 _UIApplicationHandleEventFromQueueEvent + 21066
    18  UIKit                               0x00362bc7 _UIApplicationHandleEventQueue + 2300
    19  CoreFoundation                      0x01e4e98f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
    20  CoreFoundation                      0x01e4449d __CFRunLoopDoSources0 + 253
    21  CoreFoundation                      0x01e439f8 __CFRunLoopRun + 952
    22  CoreFoundation                      0x01e4337b CFRunLoopRunSpecific + 443
    23  CoreFoundation                      0x01e431ab CFRunLoopRunInMode + 123
    24  GraphicsServices                    0x022da2c1 GSEventRunModal + 192
    25  GraphicsServices                    0x022da0fe GSEventRun + 104
    26  UIKit                               0x003669b6 UIApplicationMain + 1526
    27  iOSPDFRenderer                      0x000ec94d main + 141
    28  libdyld.dylib                       0x02e58ac9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
有人知道为什么会这样吗


非常感谢

您的segue直接连接到
PDFViewController
,而不是
UINavigationController
。如果这真的是您想要的,请更换

UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
PDFViewController *controller = (PDFViewController *)navController.topViewController;


如果希望在弹出窗口中显示PDF视图控制器,请在情节提要中插入UINavigationController,使PDF视图控制器成为其根视图控制器,并将segue类型更改为modal。在这种情况下,您的代码应该可以正常工作。

从错误日志和代码中,我认为您的顶部没有导航控制器。请尝试以下操作:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"showPDF"]){
        PDFViewController *controller = (PDFViewController *))segue.destinationViewController;
        controller.yourName = self.yourName;
    }
}

segues destination view controller不是导航控制器,而是它的PDFViewController,您正在将它显式地键入到UINavigation controller中

您可以发布崩溃消息吗?尼克,我已经在问题中添加了这个信息。这个方法非常有效,谢谢。这很奇怪,因为我确实嵌入了导航控制器,所以我不知道为什么会这样?嗯,我认为在视图控制器调用show PDF之前,您已经嵌入了导航控制器,我认为在调用“showPDF”之后没有新的导航控制器。我想您可能是对的,无论如何,它现在正在按需要工作,谢谢你的帮助!
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"showPDF"]){
        PDFViewController *controller = (PDFViewController *))segue.destinationViewController;
        controller.yourName = self.yourName;
    }
}