使用 Storyboard ,我有一个带有行列表的 TableView Controller 。当选择一行时,我想将与该行关联的数据传递到嵌入 UINavigationController 中的另一个 TableView Controller 。
- (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;
我不确定为什么会导致此错误。
最佳答案
在我看来,你的 Storyboard设置错误。第二个 tableViewController 不应该嵌入到它自己的导航 Controller 中。只需设置从第一个 tableViewController 到第二个 tableViewController 的推送序列即可 - 第二个 tableViewController 将自动嵌入与第一个 tableViewController 相同的导航 Controller 中。
我认为错误的原因是因为目标 View Controller 实际上是您嵌入第二个 View Controller 的导航 Controller 。这一行没有执行您期望的操作:
NewJobsTableViewController *newJobsTableViewController = segue.destinationViewController;
即使您将destinationViewController的返回值设置为您的类,它也会返回它实际是什么——我敢打赌,如果您记录newJobsTableViewController的类,它实际上会作为UINavigationController返回。
关于objective-c - 从 Table ViewController 到另一个 UITableViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13326560/