从TableViewController到另一个TableViewController

时间:2012-11-10 22:12:29

标签: objective-c ios uistoryboardsegue

使用故事板我有一个带有行列表的表视图控制器。当选择一行时,我想将与该行相关联的数据传递给另一个嵌入在UINavigationController中的表视图控制器。

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

    if ([segue.identifier isEqualToString:@"EditJob"])
    {
        NewJobsTableViewController *newJobsTableViewController = segue.destinationViewController;
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

        Jobs *job = [self.fetchedResultsController objectAtIndexPath:indexPath];
        newJobsTableViewController.jobDetails = job;

    }
}

在prepareForSegue方法的最后一行,我收到以下错误:
[UINavigationController setJobDetails:]:无法识别的选择器发送到实例0x83a7780 2012-11-11 08:50:25.335我的交易[40612:c07] * 由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [UINavigationController setJobDetails:]:无法识别的选择器发送到实例0x83a7780'

jobDetails在newJobsTableViewController中声明为:

@interface NewJobsTableViewController : UITableViewController <UITextFieldDelegate,      NSFetchedResultsControllerDelegate> {
    Jobs *_jobDetails;
}

@property (strong, nonatomic) Jobs *jobDetails;

我不确定为什么会导致此错误。

1 个答案:

答案 0 :(得分:1)

听起来我觉得你的故事板错了。第二个tableViewController不应嵌入其自己的导航控制器中。只需将第一个tableViewController中的push segue设置为第二个 - 第二个将自动嵌入到与第一个相同的导航控制器中。

我认为错误的原因是因为目标视图控制器实际上是您嵌入第二个视图控制器的导航控制器。这一行不符合您的预期:

 NewJobsTableViewController *newJobsTableViewController = segue.destinationViewController;

即使你将destinationViewController的返回值设置为你的类,它也将返回它实际上的任何内容 - 我打赌如果你记录newJobsTableViewController的类,它实际上会以UINavigationController的形式返回。