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]
}

このコードはすべて、ストーリーボードから必要なView Controllerを問題なく表示しますが、このView Controllerにはゲームにリンクするボタンがあります。ボタンをクリックすると、本来のようにゲームに戻ります。ゲーム中に、最初のように「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) を作成することです。そして、このView Controllerから、Myscene.mにリンクされた再生ボタンが必要です(ボタンとコントロールを作成して、SKSceneを処理するView Controllerにドラッグするだけです)、プロセスを繰り返し続けますが、このプロセスは 1 回だけ実行され、ループバックに失敗し、代わりに上記のエラーが表示されます。

どんな助けでも感謝します!

4

1 に答える 1

0

SKSceneView Controller を直接表示しないでください。NSNotificationCenter親View Controllerに別のView Controllerを提示するように指示するために使用します。

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 に答える