2013-08-04 3 views
-2

J'ai une vue de table qui liste les athlètes. Quand un athlète est sélectionné, je souhaite que le contrôleur de vue de détail (le contrôleur qui est poussé sur la pile) connaisse tous les attributs de l'athlète. son nom, son anniversaire, son numéro de téléphone, etc. Mais je ne sais pas comment transmettre cette information.comment passer des objets entre les contrôleurs de vue

allathletes.h

-(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:@"last" 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]; 
} 


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    NSString *segueIdentifier = [segue identifier]; 
    if ([segueIdentifier isEqualToString:@"setAthlete"]) 
    { 
     UINavigationController *navController = (UINavigationController *)[segue destinationViewController]; 
     AllAthletes *athleteList = (AllAthletes *)[[navController viewControllers] lastObject]; 
     //the line below gets an error :(
     AthleteDetail.managedObjectContext = self.managedObjectContext; 
    } 
} 
+0

duplication possible de [Passing Data between View Controllers] (http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) –

Répondre

0

Avant de pousser un contrôleur de vue détaillée, définissez une propriété sur elle avec les données à afficher, comme:

myDetailViewController.myModel = selectedModel; 

Dans la vue détaillée, vous pouvez définir jusqu'à la vue en utilisant ces données dans viewWillAppear.

0

Je pense que vous allez vouloir utiliser des délégués. Voici un excellent tutoriel sur la façon de faire cela: Link

+2

Non , pas vraiment. Lorsque vous transmettez des données à un contrôleur de détail, vous n'utilisez normalement pas de délégué. Si vous souhaitez renvoyer des données au premier contrôleur, vous utilisez un délégué. – rdelmar

Questions connexes