Objective c 从TableViewController切换到另一个TableViewController
使用故事板,我有一个带有行列表的表视图控制器。当选择一行时,我希望将与该行关联的数据传递给另一个表视图控制器,该控制器嵌入在UINavigationController中Objective c 从TableViewController切换到另一个TableViewController,objective-c,ios,uistoryboardsegue,Objective C,Ios,Uistoryboardsegue,使用故事板,我有一个带有行列表的表视图控制器。当选择一行时,我希望将与该行关联的数据传递给另一个表视图控制器,该控制器嵌入在UINavigationController中 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"EditJob"]) { NewJobsTableViewControl
- (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;
@interface NewJobsTableViewController:UITableViewController{
职位*\职位详情;
}
@属性(强、非原子)作业*作业详细信息;
我不确定它为什么会导致这个错误 我觉得你的故事板设置错误。第二个tableViewController不应该嵌入到它自己的导航控制器中。只需设置一个从第一个tableViewController到第二个tableViewController的推送序列——第二个将自动嵌入到与第一个相同的导航控制器中 我认为,出现错误的原因是,目标视图控制器实际上是嵌入第二个视图控制器的导航控制器。这一行并没有达到您期望的效果:
NewJobsTableViewController *newJobsTableViewController = segue.destinationViewController;
即使您将destinationViewController的返回值设置为您的类,它也会返回实际返回的值--我打赌如果您记录newJobsTableViewController的类,它实际上将作为UINavigationController返回。您是否尝试记录您的控制器?那么您将如何检索NewJobsTableViewController?@Stas,只是不要将第二个表视图控制器嵌入其自己的导航控制器中,那么该行将检索NewJobsTableViewController。谢谢。我试图重新使用NewJobsTableViewController来添加和编辑数据。因此,我有一个初始的segue来添加新数据,但随后我也添加了另一个segue来编辑数据,这就是它出错的地方。我只是简单地将NewJobsTableViewController场景复制/粘贴到故事板上,然后将“编辑”序列重定向到副本,但两者都引用相同的类文件。
- (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;
}
}