gpt4 book ai didi

ios - 将浮点值传递给另一个 ViewController

转载 作者:行者123 更新时间:2023-11-29 03:28:15 25 4
gpt4 key购买 nike

我有 2 个 Controller ,我想从 LevelViewController 发送一个 floatViewController。但它始终将其发送为 0(零)。这是我的 LevelViewController.m

ViewController *inGame = [[ViewController alloc] init];
enemySpeedShouldBe = 0.800f - 0.07f * levelSelected;
inGame.enemySpeed = enemySpeedShouldBe;

levelSelectedenemySpeedShouldBe 也是 float 。

NSLog(@"%f", levelSelected) 给我正确的值(1.0、2.0 等),但是当我将它发送到 ViewController 时,它等于到 0。

这是我的 ViewController.h

@property (nonatomic) float enemySpeed;

我已阅读有关此问题的信息,但找不到任何解决方法。

--/--/--/--/--/--/--/--/--/--/--编辑--/--/--/--/--/--/--/--/--/--

这是“ViewController.m”中我的敌方毫秒计数器方法

-(void)enemyStartCounter{
enemyMs += 0.001;
if(enemyMs > enemySpeed){ // i use 'enemySpeed' nowhere except here
[enemyTimer invalidate];
[fire setHidden:YES];
[self enemyFired];
}
}
-(void)enemyCounter{
enemyMs = 0;
enemyTimer = [NSTimer scheduledTimerWithTimeInterval:0.001/1.0 target:self selector:@selector(enemyStartCounter) userInfo:nil repeats:YES];
}

和我在“LevelViewController.m”中的操作方法中的按钮修饰

- (void)didTapLevel:(UIButton *)buttonn{
levelSelected = (float)buttonn.tag + 1.0f ;
ViewController *inGame = [[ViewController alloc] init];
enemySpeedShouldBe = 0.800f - (0.07f * levelSelected);
inGame.enemySpeed = enemySpeedShouldBe;
[self performSegueWithIdentifier:@"1player" sender:self];
}

最佳答案

在代码中的某个时刻,您正在创建 ViewController 的实例,并使用 enemySpeed 的值对其进行配置,然后可能将其丢弃。

在其他地方,正在创建另一个实例。此实例尚未配置,但您正在对其调用enemyStartCounter,因此它记录为零。

您需要确保了解您拥有的每个类的实例以及它们的使用方式。您的 View Controller 可以从 Storyboard segue 创建,在这种情况下,您需要通过使用 prepareForSegue:sender: 拦截 segue 来获取对它的引用。


此代码创建 2 个不同的实例:

- (void)didTapLevel:(UIButton *)buttonn{
ViewController *inGame = [[ViewController alloc] init]; // create first instance
inGame.enemySpeed = enemySpeedShouldBe;
[self performSegueWithIdentifier:@"1player" sender:self]; // create second instance
}

所以你应该做的是:

- (void)didTapLevel:(UIButton *)buttonn{
[self performSegueWithIdentifier:@"1player" sender:self]; // create single instance
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
ViewController *inGame = (ViewController *)[segue destinationViewController]; // get single instance
inGame.enemySpeed = enemySpeedShouldBe;
}

关于ios - 将浮点值传递给另一个 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20166244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com