应用程序尝试在 didSelectRowAtIndexPath 中将 nil 视图控制器推送到目标上

Posted

技术标签:

【中文标题】应用程序尝试在 didSelectRowAtIndexPath 中将 nil 视图控制器推送到目标上【英文标题】:Application tried to push a nil view controller on target in didSelectRowAtIndexPath 【发布时间】:2015-09-10 14:50:18 【问题描述】:

我们有两个UIViewControllers

firstViewController

SecondViewController

.当我们点击the UItableViewCell 时,我们希望它与SecondViewController 保持一致。

我们试过这样

   - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    UIStoryboard *storyboard;

   destinationController = [[UserDetails alloc] init];
   destinationController = (UserDetails *)[storyboard instantiateViewControllerWithIdentifier:@"User"];
   destinationController.FriendlyName.text=[usernameFriendlyName objectAtIndex:indexPath.row];
   UIBarButtonItem * backButton =[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:nil];
   destinationController.navigationItem.backBarButtonItem = backButton;
  [self.navigationController pushViewController:destinationController animated:TRUE];

请指导我们。我们的代码有什么问题。

【问题讨论】:

一件事是您没有正确分配情节提要。尝试使用类方法storyboardWithName从正确的故事板文件生成故事板。developer.apple.com/library/prerelease/ios/documentation/UIKit/…: 显然故事板在那里是零 为什么要以编程方式执行此操作,只需使用情节提要 在尝试编写一些东西之前,您可能应该阅读一些有关 Objective C 的书。您的 storyboard 为 nil,因此向其发送消息返回 nil。您还可以实例化 destinationController 并无缘无故地覆盖它 @u.gen 我们需要 didSelectRowAtIndexPath。 【参考方案1】:

不需要做这一切。只需用 Push segue 连接两个 viewController。 提供一些标识符以进行转场,只需将这一行写在didSelectRowAtIndexPath

[self performSegueWithIdentifier: @"Your segue identifier" sender: self];

要将数据从一个视图传递到另一个视图,请使用PrepareForSegue 方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"Your segue identifier"])
    
        // Get reference to the destination view controller
        YourViewController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        [vc setMyObjectHere:object];
    

【讨论】:

以上是关于应用程序尝试在 didSelectRowAtIndexPath 中将 nil 视图控制器推送到目标上的主要内容,如果未能解决你的问题,请参考以下文章

无法获取 didSelectRowAtIndexPath 来注册点击

滚动时 UITableView 复选标记消失

reloadRowsAtIndexPaths 的副作用?

UITableViewCell的accessoryView在可见视图改变后消失

UITableViewCell 滚动时变为蓝色

将 UIButtons 发送到桌面?