我正在尝试从一个传递数据UITableViewController
到另一个。这是我在初始视图控制器中的代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
Subject *subject = (Subject *)[self.fetchedResultsController objectAtIndexPath:indexPath];
[self showList:subject animated:YES];
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}
- (void)showList:(Subject *)subject animated:(BOOL)animated {
ListsViewController *lists = [[ListsViewController alloc] initWithStyle:UITableViewStyleGrouped];
lists.subject = subject;
NSLog(@"%@", lists.subject);
[self performSegueWithIdentifier:@"showDetail" sender:self];
}
日志输出显示我想要的数据已被传递。但是,当我执行 segue 并记录时subject
in the ListsViewController
显示为空。
有任何想法吗?
你需要覆盖prepareForSegue:sender:
方法。快速解决办法是
- (void)showList:(Subject *)subject animated:(BOOL)animated
{
[self performSegueWithIdentifier:@"showDetail" sender:subject];
}
...
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showDetail"]) {
ListsViewController *controller = ([segue.destinationViewController isKindOfClass:[ListsViewController class]]) ? segue.destinationViewController : nil;
controller.subject = ([sender isKindOfClass:[Subject class]]) ? subject : nil;
}
}
您的代码不起作用的原因是在您的showList:animated:
您创建的方法ListsViewController
实例并为其分配了一个subject
,但这个视图控制器从未出现过。反而performSegueWithIdentifier:sender
创建你的另一个实例ListsViewController
类对你一无所知subject
。这就是为什么您需要等待 UIStoryboardSegue 从故事板实例化目标视图控制器,然后按照您想要的方式配置它,您可以在prepareForSegue:sender:
method.
另外,这可能不是使用的最佳主意subject
作为发件人performSegueWithIdentifier:sender
方法,因为它不是发件人:)。我要做的是在视图控制器类中创建一个属性主题并使用它prepareForSegue:sender:
@interface MyViewController ()
@property (strong, nonatomic) Subject *subject;
@end
@implementation MyViewController
- (void)showList:(Subject *)subject animated:(BOOL)animated
{
self.subject = subject;
[self performSegueWithIdentifier:@"showDetail" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showDetail"]) {
ListsViewController *controller = ([segue.destinationViewController isKindOfClass:[ListsViewController class]]) ? segue.destinationViewController : nil;
controller.subject = self.subject;
}
}
...
@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)