gpt4 book ai didi

ios - 警告 : Attempt to present * on * whose view is not in the window hierarchy with SLComposeViewController

转载 作者:行者123 更新时间:2023-11-28 20:04:25 25 4
gpt4 key购买 nike

当我在游戏中推送推特图片时,我想显示分享图片(SLComposeViewController 的模态显示)。
但是,当我按下 twitter 按钮时,显示不显示,日志显示如标题。
然后,我搜索了类似的问题,但我不确定我应该怎么做......[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

主场景.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;

应该删除警告

关于ios - 警告 : Attempt to present * on * whose view is not in the window hierarchy with SLComposeViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22568353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com