为什么插入导航会创建无法识别的选择器?

Why does inserting navigation create unrecognized selector sent?

在我的应用程序中,我决定将我的 segue 更改为故事板中的 Show Details segue,因为我希望故事板的影响来自屏幕底部,因此我需要一些方法来吸引用户回来,所以我在目标视图中插入了一个导航。但是现在我得到:

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[UINavigationController setImageData:]:无法识别的选择器发送到实例 0x7fbdfa887600'

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"infoSegue"])
    {
        // Get reference to the destination view controller
        DetailsViewController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        int num = (int)[self getIndexNum];

        NSString *dictionaryKey = _results[num];
        Image *image = _dataDictionary[dictionaryKey];
        vc.imageData = image;
        NSLog(@"Vendor ID %@",image.vendorId);

    }
}

导航变成视图的父级了吗?

作为 destinationViewController returns 通用类型 UIViewController 你必须进行类型转换。

DetailsViewController *vc = (DetailsViewController *)[segue destinationViewController];

如果你的目标视图控制器是一个导航控制器,那么你不应该在导航控制器上设置图像!!正如@vadian 从答案中所说的那样,你需要转换 return 类型的 uiviewcontroller!!!

UINavigationController *navController = [segue destinationViewController];
DetailsViewController *viewController = (DetailsViewController *)([navController viewControllers][0]);
[viewController setimageData:image];

确保 imageData 是同类 UIImage。如果它是 NSData 类型,您可能需要这样做:

 [viewController setimageData:[UIImage imageWithData:imageData]];