Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios GameCenter在另一个场景中显示排行榜_Ios_Objective C_Sprite Kit_Game Center - Fatal编程技术网

Ios GameCenter在另一个场景中显示排行榜

Ios GameCenter在另一个场景中显示排行榜,ios,objective-c,sprite-kit,game-center,Ios,Objective C,Sprite Kit,Game Center,我在ViewController中的SpriteKit游戏中启用了游戏中心功能。一切正常,但我想在按下按钮后在另一个场景中显示排行榜。我正确地导入了所有内容。我的项目现在在触摸Head.m文件中的“HighScoreButton”后崩溃,输出如下: 'NSInvalidArgumentException', reason: '-[UIView presentScene:]: unrecognized selector sent to instance 0x7feec2ff2920' 我最近的代

我在ViewController中的SpriteKit游戏中启用了游戏中心功能。一切正常,但我想在按下按钮后在另一个场景中显示排行榜。我正确地导入了所有内容。我的项目现在在触摸Head.m文件中的“HighScoreButton”后崩溃,输出如下:

'NSInvalidArgumentException', reason: '-[UIView presentScene:]: unrecognized selector sent to instance 0x7feec2ff2920'
我最近的代码不起作用:

ViewController.h

@interface ViewController : UIViewController <GKGameCenterControllerDelegate> 
- (void)showLeaderboardAndAchievements:(BOOL)shouldShowLeaderboard;
+ (ViewController*)defaultHelper;
@end

if ([Node.name isEqualToString:@"HighScoreButton"]){
    [[ViewController defaultHelper] showLeaderboardAndAchievements:YES];
}

我认为问题在于视图控制器的单例初始化(顺便说一句,这是正确的)

首次加载时,视图控制器是“幕后”创建的(我不确定确切位置,但我会查找它),其视图是用
skView
实例初始化的。(由于它不是由您创建的,所以您的单例实例没有初始化,并且使用了不同的
ViewController
实例)

由于首次创建视图控制器时未使用
defaultHelper
方法,因此您正在创建一个新的视图控制器,其视图是
UIView
的实例,并且不符合
SKView
方法(例如
setShowFPS
presentScene
)。当然,因为您创建了一个新的视图控制器,所以它不是视图层次结构的一部分

我建议您按如下方式检索视图控制器:

if ([Node.name isEqualToString:@"HighScoreButton"]){
    ViewController *viewController = self.view.window.rootViewController;
    [viewController showLeaderboardAndAchievements:YES];
}

在您的代码中的某个地方,您正在UIView实例上调用setShowFPS,您也可以共享此代码吗?我有skView.showsFPS=NO;在我的ViewController中。我更新了输出。你删除了吗?我在发布的代码中看不到它。是的,我删除了它,输出更改了。非常感谢您花时间帮助我。
if ([Node.name isEqualToString:@"HighScoreButton"]){
    ViewController *viewController = self.view.window.rootViewController;
    [viewController showLeaderboardAndAchievements:YES];
}