J'essaye de passer le score de ma partie de jeu au tableau de bord. Cependant, je n'arrive pas à le faire. C'est mon code dans mon GameViewController.

- (void)gameHasEnded {
    ScoreViewController *scoreVC = [[ScoreViewController alloc] initWithNibName:@"ScoreVC" bundle:nil];
    scoreVC.score = scoreAsString;
    NSLog(@"%@",scoreVC.score);
    [self performSegueWithIdentifier:@"continueToScore" sender:self];
}

C'est mon code dans mon ScoreViewController.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.scoreLabel.text = scoreString;
    NSLog(@"Score = %d", self.score);
}

Dans le journal, il affiche le score correct avant d'effectuer la séquence. Cependant, une fois dans ScoreViewController, il donne une valeur nulle. J'ai fait référence à Passer des données entre les contrôleurs de vue mais cela n'a pas fonctionné pour moi. Pourquoi ça ne marche pas pour moi? Y a-t-il quelque chose qui ne va pas avec le code ou ai-je manqué quelque chose dans le code?

1
Chandran 23 déc. 2015 à 06:26

3 réponses

Meilleure réponse

Vous pouvez passer les valeurs sous la méthode preparsforsegue comme ci-dessous,

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    if([[segue identifier] isEqualToString:@"continueToScore"])
   {
       ScoreViewController *destViewController = segue.destinationViewController;

       destViewController .score = scoreAsString;
    }

}

Ça va marcher. essayez-le! Remarque: vous devez définir une variable dans l'interface comme,

ScoreViewController *scoreVC;
0
Undo 26 déc. 2015 à 01:41

Vous pouvez l'essayer.

Importez votre SecondViewController dans votre GameViewController

#import "SecondViewController.h"

Puis dans votre fichier GameViewController.m utilisez cette méthode

- (void)prepareForSegue:(UIStoryboard *)segue sender:(id)sender
{
  if([segue.identifier isEqualToString:@"your_segue_name_here"])
   {
      SecondViewController *svc = segue.destinationViewController;
      //herer you can pass your data(it is easy if you use a model)
   }
}

Vérifiez que vous avez donné un nom à votre segment et assurez-vous que vous avez utilisé le même nom que segue.identifier

0
Jobs 23 déc. 2015 à 04:47

Une méthode init ... personnalisée dans le contrôleur de vue cible qui prend les données dont le contrôleur de vue a besoin comme arguments. Cela rend le but de la classe encore plus clair et évite les problèmes possibles lorsqu'un autre objet attribue une nouvelle valeur à la propriété lorsque la vue est déjà à l'écran. Dans le code, cela ressemblerait à ceci:

  - (IBAction)nextScreenButtonTapped:(id)sender
{
ScoreViewController *scoreVC = [[ScoreViewController alloc]
initWithScore:self.scoreAsString];
[self.navigationController pushViewController:scoreVC animated:YES];
}

Et dans ScoreViewController.m:

 - (id)initWithScore:(NSString *)theScore
{
self = [super initWithNibName:@"ScoreViewController" bundle:nil];
if (self) {
_score = [theScore copy];
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
self.scoreLabel.text = _score;
}
0
Sujatha Girijala 28 déc. 2016 à 06:47