Ios 应用程序试图将nil视图控制器推送到目标上

Ios 应用程序试图将nil视图控制器推送到目标上,ios,objective-c,uitableview,detailview,Ios,Objective C,Uitableview,Detailview,我正在创建一个没有故事板的应用程序,我在从用户单击表格视图单元格移动到该单元格的详细视图时遇到困难 在创建和处理表视图的类中,我有以下代码: -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { PersonDetailViewController *detailViewController; Person *person = [self.playe

我正在创建一个没有故事板的应用程序,我在从用户单击表格视图单元格移动到该单元格的详细视图时遇到困难

在创建和处理表视图的类中,我有以下代码:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    PersonDetailViewController *detailViewController;
    Person *person = [self.playerArray objectAtIndex:indexPath.row];
    detailViewController.person = person;
    [[self navigationController] pushViewController:detailViewController animated:YES];

}
#import "PersonDetailViewController.h"

@interface PersonDetailViewController ()

@end

@implementation PersonDetailViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.personInfo = [[UITextField alloc] initWithFrame:CGRectMake(45, 30, 200, 40)];
    _personInfo.backgroundColor = [UIColor whiteColor];


}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
因此,我尝试将详细视图控制器推到屏幕上,然后在该详细屏幕上显示用户信息。我试图找到一个解决方案,但我遇到的大多数答案都使用故事板,而我没有使用故事板

在我的PersonDetailViewController.m类中,我有以下代码:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    PersonDetailViewController *detailViewController;
    Person *person = [self.playerArray objectAtIndex:indexPath.row];
    detailViewController.person = person;
    [[self navigationController] pushViewController:detailViewController animated:YES];

}
#import "PersonDetailViewController.h"

@interface PersonDetailViewController ()

@end

@implementation PersonDetailViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.personInfo = [[UITextField alloc] initWithFrame:CGRectMake(45, 30, 200, 40)];
    _personInfo.backgroundColor = [UIColor whiteColor];


}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
我不确定这是否是问题的原因,但在我的代表中,我有以下几点:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    self.tableViewController = [[TableViewController alloc]init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self.tableViewController];
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
    return YES;
}

我在想,也许它与创建导航控制器有关,但我只是在玩弄它,我不认为它有什么关系

您错过了tableView:DidSelectRowatingIndexPath:方法中视图控制器的初始化

PersonDetailViewController *detailViewController = [[PersonDetailViewController alloc] init]; // or initWith...

您错过了tableView:didSelectRowAtIndexPath:方法中视图控制器的初始化

PersonDetailViewController *detailViewController = [[PersonDetailViewController alloc] init]; // or initWith...

您错过了tableView:didSelectRowAtIndexPath:方法中视图控制器的初始化

PersonDetailViewController *detailViewController = [[PersonDetailViewController alloc] init]; // or initWith...

您错过了tableView:didSelectRowAtIndexPath:方法中视图控制器的初始化

PersonDetailViewController *detailViewController = [[PersonDetailViewController alloc] init]; // or initWith...