无法在两个视图控制器

时间:2015-12-23 03:26:08

标签: ios objective-c uiviewcontroller

我试图将得分从我的游戏部分传递到记分牌。但是,我似乎无法做到这一点。这是我GameViewController中的代码。

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

这是我ScoreViewController中的代码。

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

在日志中,它会在执行segue之前显示正确的分数。但是,一旦在ScoreViewController中,它就会给出一个空值。我提到Passing Data between View Controllers,但它对我不起作用。为什么它对我不起作用?代码有什么问题,或者我错过了代码中的某些内容?

3 个答案:

答案 0 :(得分:0)

您可以通过下面的preparsforsegue方法传递值,

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

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

       destViewController .score = scoreAsString;
    }

}

它会起作用。试试吧! 注意:    你应该在界面中定义变量,如

ScoreViewController *scoreVC;

答案 1 :(得分:0)

你可以试试这个。

将SecondViewController导入到GameViewController

#import "SecondViewController.h"

然后在你的GameViewController.m文件中使用这个方法

- (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)
   }
}

检查您是否为您的segue指定了名称,并确保您使用相同名称作为segue.identifier

答案 2 :(得分:0)

目标视图控制器中的自定义init ...方法,它将视图控制器需要的数据作为参数。这使得类的目的更加清晰,并且当视图已经在屏幕上时,当另一个对象为属性分配新值时,可以避免可能出现的问题。在代码中,这将是这样的:

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

在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;
}