Macos 在OS X中显示游戏中心排行榜时未在AppKit(主)线程上运行
每当我尝试使用以下代码查看游戏中心排行榜ion OS X时:Macos 在OS X中显示游戏中心排行榜时未在AppKit(主)线程上运行,macos,thread-safety,game-center,game-center-leaderboard,Macos,Thread Safety,Game Center,Game Center Leaderboard,每当我尝试使用以下代码查看游戏中心排行榜ion OS X时: GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc]init]; gameCenterController.gameCenterDelegate = self; if (gameCenterController !=nil) { GKDialogC
GKGameCenterViewController *gameCenterController
= [[GKGameCenterViewController alloc]init];
gameCenterController.gameCenterDelegate = self;
if (gameCenterController !=nil) {
GKDialogController *sdc =[GKDialogController sharedDialogController];
gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards;
sdc.parentWindow = [NSApp mainWindow];
[sdc presentViewController:gameCenterController];
}
(这几乎是苹果公司文档的精确副本)
我得到一个:
***void assertRunningOnAppKitThread(),/SourceCache/ViewBridge/ViewBridge-99/ViewBridgeUtilities.m:535中的断言失败
引发了一个未捕获的异常
未在AppKit(主)线程上运行
通过单击菜单项调用该方法。
我尝试的是将该方法包装在
调度同步(调度获取主队列()
阻挡不成功
编辑:添加堆栈跟踪:
-似乎它从主线程(菜单点击)开始,而游戏中心本身开始了一个新的队列
我错过了什么?有什么想法吗?我想你需要将presentViewController调用(以及之前的那一行)推迟到主线程。请尝试performSelectorOnMainThread或GCD dispatch\u与主队列同步。我已经尝试了dispatch\u sync(dispatch\u get\u main\u queue()-通过包装if语句的内部来进行欺骗。“PerformMonMainThrad”是否有任何区别?游戏控制器本身似乎会切换线程。