Root ViewController не реагирует на сообщение из представления SpriteKit

Я использую root viewcontroller отображать пару ярлыков для отслеживания результатов и т. д., что работает нормально. Тем не менее, корневой viewcontroller не отвечает на сообщения от сцены сразу же, когда сцена загружается.

Ситуация такая: UIViewController подарки SKView где я инициализирую MyScene к тому же (обычный материал SpriteKit). Сразу в MyScene я загружаю уровень из json-file, который содержит количество возможных точек на этом конкретном уровне. Когда уровень загружен, я пытаюсь отправить количество возможных точек обратно в мой корневой viewcontroller, чтобы он мог отобразить его в метке.

Я пытался установить свойство myScene.mainViewController = self от viewWillLayoutSubviews на ViewControllerа потом просто [self.mainViewController setInitialScore:_bgLayer.maxScore];, но метод setInitialScore никогда не стреляет Я также пытался использовать NSNotificationCenter, но это тоже не работает.

Тем не менее, я вызываю метод в self.mainViewController всякий раз, когда игрок набирает очко (что происходит немного позже), и это прекрасно работает. Таким образом, проблема, похоже, заключается в том, что ViewController не завершил загрузку или что-то еще, поэтому он не отвечает сразу.

Как я мог решить это?

РЕДАКТИРОВАТЬ 1: Вот код по запросу:

ViewController.m

- (void)viewWillLayoutSubviews {
  [super viewWillLayoutSubviews];

  SKView *skView = (SKView *)self.view;
  if (!skView.scene) {
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

    // Create and configure the scene.
    MyScene* scene = [MyScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;
    scene.mainViewController = self;

    // Present the scene.
    [skView presentScene:scene];

    self.numLives = bStartNumLives;
    self.score = 0;
    [self resetLabels];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setInitialRings:) name:@"setInitialRings" object:nil];
  }
}

- (void)setInitialRings:(NSNotification *)notification {
  NSLog(@"Initial rings set");
  NSDictionary *userInfo = [notification userInfo];
  NSInteger rings = [(NSNumber *)[userInfo objectForKey:@"rings"] integerValue];

  self.numRings = rings;

  [self resetLabels];
}

MyScene.m

- (void)createWorld {
  _bgLayer = [self createScenery];
  NSLog(@"world created setting initial rings");
  NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:_bgLayer.numRings] forKey:@"rings"];
  [[NSNotificationCenter defaultCenter] postNotificationName:@"setInitialRings" object:userInfo];

  _worldNode = [SKNode node];
  [_worldNode addChild:_bgLayer];
  [self addChild:_worldNode];

  self.anchorPoint = CGPointMake(0.5, 0.5);
  _worldNode.position = CGPointMake(-_bgLayer.layerSize.width / 2, -_bgLayer.layerSize.height / 2);
}

Как вы можете видеть из этого фрагмента кода, я пытаюсь использовать NSNotificationCenter, Я также пытался позвонить [self.mainViewController setInitialRings:_bgLayer.numRings]; вручную (но меняя setInitialRings-метод, чтобы взять целое число вместо уведомления).

0 ответов

Другие вопросы по тегам