2013-11-23 2 views
0

У меня есть 2 контроллера, и я бы хотел послать float от LevelViewController до ViewController. Но он всегда посылает его как 0 (ноль). Вот мой LevelViewController.mПередача значения поплавка другому ViewController

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

Где levelSelected и enemySpeedShouldBe также плавает.

NSLog(@"%f", levelSelected) дает мне правильное значение (1.0, 2.0 и т.д.), но когда я посылаю его к ViewController, он равен 0.

Вот мой ViewController.h

@property (nonatomic) float enemySpeed; 

Я я читал об этой проблеме, но я не мог найти способ заставить ее работать.

-/-/-/-/-/-/-/-/-/-/- EDIT -/-/-/-/- -/-/-/-/-/-

вот мой враг миллисекунды методы счетчик в "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]; 
} 

и моя кнопка TouchUp внутри метода действия в «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]; 
} 
+0

Где вы регистрируете 'enemySpeed'? – rmaddy

+0

Я не регистрирую его нигде, это был просто тест, чтобы увидеть его значение –

+0

@ user3025584 В вашем вопросе вы заявили, что вы назвали 'NSLog (@"% f ", enemySpeed)' в ViewController.m. Где именно (какой метод) это строка кода? – rmaddy

ответ

1

в какой-то момент в коде, который вы создаете этот экземпляр ViewController, настраивая его со значением Fo r enemySpeed, а затем, вероятно, выбросив его.

В другом месте создается другой экземпляр. Этот экземпляр не настроен, но вы вызываете на нем enemyStartCounter, поэтому он регистрирует ноль.

Вам необходимо убедиться, что вы понимаете, какие экземпляры каждого класса у вас есть и как они используются. Ваш контроллер просмотра может быть создан из расписания Storyboard, в этом случае вам нужно получить ссылку на него, перехватив segue, используя prepareForSegue:sender:.


Этот код создает 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; 
} 
+0

спасибо за помощь, но я не совсем понял эту вещь. Вы можете дать более подробную информацию. это действительно поможет –

+0

OMG он работал thaaaaaaank вас так много. Я боролся с этой проблемой в течение 3 дней. наконец ... спасибо –

0

Я предпочитаю, чтобы создать свойство NSNumber, чтобы сделать это:

@property (strong, nonatomic) NSNumber *enemySpeed; // in your viewController 


// passing the parameter 
inGame.enemySpeed = [NSNumber numberWithFloat:(0.800f - 0.07f * levelSelected)]; 

Тогда, если вы pas s свойство между контроллерами вы можете сделать это:

NSLog(@"%f", [enemySpeed floatValue]); 
+0

все еще дает нуль .. это не сработало Извините –

+0

Вы использовали NSLog, прежде чем добавить значение в свойство inGame? Я имею в виду, 'float * enemySpd = 0.800f - 0.07f * levelSelected); NSLog (@ "% f", enemySpeed); 'и затем' inGame.enemySpeed ​​= [NSNumber numberWithFloat: enenmySpd]; 'Какой результат вы получаете? – croigsalvador

Смежные вопросы