我试图将得分从我的游戏部分传递到记分牌。但是,我似乎无法做到这一点。这是我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,但它对我不起作用。为什么它对我不起作用?代码有什么问题,或者我错过了代码中的某些内容?
答案 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;
}