在视图控制器之间传递数据segue

我的第一个视图控制器AllAthletes是我所有核心数据实体的AllAthletes视图。 它显示实体“运动员”,它是在字幕样式表单元格中的属性,如名字等。当你点击一个视图单元格时,我希望这个视图控制器传递被选中的实体的信息, m不确定如何将这些信息(indexpath的managedobject,entity,properties等)传递给detail view controller。 有人能指点我的方向吗?

allathletes.m

 -(void)viewWillAppear:(BOOL)animated{ AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; _managedObjectContext = [appDelegate managedObjectContext]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSEntityDescription *athlete = [NSEntityDescription entityForName:@"Athlete" inManagedObjectContext:_managedObjectContext]; [request setEntity:athlete]; NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"first" ascending:YES]; NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:sortDescriptor, nil]; [request setSortDescriptors:sortDescriptors]; NSError *error = nil; NSMutableArray *mutableFetchResults = [[_managedObjectContext executeFetchRequest:request error:&error] mutableCopy]; if (mutableFetchResults == nil){ //handle error } [self setAthleteArray:mutableFetchResults]; [self.tableView reloadData]; } //this is what I have so far - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"setAthlete"]) { NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; AthleteDetail *destViewController = segue.destinationViewController; } } //i was also thinking something like this? - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIViewController* detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; NSMutableString *object = thisArray[indexPath.row]; detailViewController.passedData = object; [self.navigationController pushViewController:detailViewController animated:YES]; } 

它推动你的第二个控制器是AthleteDetail。 感谢您的时间。

你在混合两个不同的概念。 代替

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIViewController* detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; NSMutableString *object = thisArray[indexPath.row]; detailViewController.passedData = object; [self.navigationController pushViewController:detailViewController animated:YES]; } 

你应该这样做

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self performSegueWithIdentifier:YOUR_SEGUE_IDENTIFIER sender:self]; } 

接着:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:YOUR_SEGUE_IDENTIFIER]) { NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; AthleteDetail *destViewController = segue.destinationViewController; // set whatever you want here in your destination view controller destViewController.passedData = object; } } 

并确保你的Segue是一个Push Segue。