0

我会尽力解释这一点。好的,我在 xcode5 中使用 SpriteKit。在 Myscene.mi 中有一个方法叫做:

-(void)presentViewController
{
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"MyView"];
    [self.view.window.rootViewController presentViewController:vc animated:YES completion:nil];
}

然后在我的 NSTimeintervalUpdate 方法中,我有一个代码说

if(score >= 3)
{
    [self presentViewController]
}

所有这些代码都会从情节提要中调出我想要的视图控制器,就像它应该没有问题一样,但是在这个视图控制器中,它有一个链接回游戏的按钮。当您单击按钮时,它会按原样返回游戏。好吧,在游戏过程中,它并没有像第一次那样以“3”的分数返回我的 ViewController,它只是继续计数并在日志中提供以下错误消息:

2014-07-12 22:40:27.710 tests[337:60b] Warning: Attempt to present <ViewController2: 0xc354e40> on <ViewController: 0x9960b80> whose view is not in the window hierarchy!

我的意图是拥有我的游戏(Myscene.m),当游戏结束时,是拥有一个游戏结束屏幕(ViewController)。然后从这个视图控制器中,我希望它有一个再次播放按钮,该按钮链接回 Myscene.m(我只是通过制作按钮和控件并拖动到处理我的 SKScene 的视图控制器来完成)并继续重复过程但是它只会执行一次此过程,然后无法循环返回,而是出现上述错误。

任何帮助表示感谢!

4

1 回答 1

0

不要SKScene直接显示 View Controller。用于NSNotificationCenter告诉父视图控制器呈现另一个视图控制器:

GameSceneViewController.m

@interface GameSceneViewController

@property (nonatomic) int score;

@end

@implementation GameSceneViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(presentMyViewController:) name:@"presentMyViewController" object:nil];
}
- (void)presentMyViewController:(NSNotification *)notification {
    self.score = notification.userInfo[@"score"];
    [self performSegueWithIdentifier:(segue identifier) sender:nil];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:(segue identifier])
    {
        // Get reference to the destination view controller
        MyViewController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        vc.score = self.score;
    }
}


@end

然后GameScene.m打电话:

[[NSNotificationCenter defaultCenter] postNotificationName:@"presentMyViewController" object:nil userInfo:@{"score" : self.score}];
于 2014-07-13T04:12:21.320 回答