Ios GameCenter在另一个场景中显示排行榜
我在ViewController中的SpriteKit游戏中启用了游戏中心功能。一切正常,但我想在按下按钮后在另一个场景中显示排行榜。我正确地导入了所有内容。我的项目现在在触摸Head.m文件中的“HighScoreButton”后崩溃,输出如下: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' 我最近的代
'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];
}