警告:尝试使用SLComposeViewController将不在窗口层次结构中的*视为*

当我在游戏中推送Twitter图像时,我想显示共享图像(SLComposeViewController的模式显示)。
但是,当我推动Twitterbutton,显示不显示和日志说像标题。
然后,我search了类似的问题,但我不知道该怎么做… [ViewDidLoad]和[ViewDidAppear]是重要的事情,我知道。 以下是我的代码。

ViewController.m

#import "ViewController.h" #import "NewGameScene.h" #import <Social/Social.h> #import "GameOverScene.h" @interface ViewController () { GameOverScene *gameOver; } @end @implementation ViewController //Loads the view onto our main class - (void)loadView { self.view = [[SKView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; } //Executes when view finishes loading - (void)viewWillLayoutSubviews { //extracted important code. [super viewDidLoad]; gameOver = [[GameOverScene alloc]init]; gameOver.delegate = self; } -(void)showShareScreen { NSLog(@"showShareScreen"); if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) { SLComposeViewController *tweetSheet = [SLComposeViewController poseViewControllerForServiceType:SLServiceTypeTwitter]; [tweetSheet setInitialText:@"TestTweet from the Game !!"]; NSLog(@"self = %@",self); [self presentViewController:tweetSheet animated:YES completion:nil]; } else { NSLog(@"not sls type twitter"); } } @end 

MainScene.m

 #import "MainScene.h" #import "GameOverScene.h" #import "Player.h" #import "Obstacle.h" #import "ViewController.h" static GameOverScene *gameOver; -(void)die{ //Create our game over scene with the current scene's dimensions GameOverScene *gameOver = [[GameOverScene alloc] initWithSize:self.size]; ViewController *vc = [[ViewController alloc] init]; gameOver.delegate = vc; NSLog(@"vc = %@",vc); [gameOver didMoveToView:self.view]; //Present the game over scene with the fade in transition [self.scene.view presentScene:gameOver transition:transition]; }]; } 

GameOverScene.m

 #import "GameOverScene.h" #import "NewGameScene.h" #import "MainScene.h" #import <Social/Social.h> //Screen is touched - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //Same as in NewGameScene menu UITouch *touch = [touches anyObject]; CGPoint location = [touch locationInNode:self]; SKNode *node = [self nodeAtPoint:location]; //Is the retry button touched? if([node.name isEqualToString:@"twitterbutton"]){ NSLog(@"self.delegate = %@",self.delegate); [self.delegate showShareScreen]; if (nil == self.delegate) NSLog(@"delegate is nil"); } } @end 

这个问题在下面的评论中描述。

 GameOverScene *gameOver = [[GameOverScene alloc] initWithSize:self.size]; ViewController *vc = [[ViewController alloc] init];//This is causing the problem. //The delegate has to be the viewController which is presenting the scene gameOver.delegate = vc; NSLog(@"vc = %@",vc); [gameOver didMoveToView:self.view]; //Why are you calling this line?? //Present the game over scene with the fade in transition [self.scene.view presentScene:gameOver transition:transition]; 

而不是行:

 gameOver.delegate = vc; 

尝试使用这一行代替:

 gameOver.delegate = self.view.window.rootViewController; 

编辑:

使用线

 gameOver.delegate = (ViewController*) self.view.window.rootViewController; 

应该删除警告