Swift 4中NSAlert未解析标识符错误,SKScene能否使用NSAlert?
解决SKScene中使用NSAlert报错的问题
嘿,这个坑我之前踩过!先给你理清问题根源:
NSAlert是macOS专属的AppKit框架组件,如果你的项目是iOS平台的,那自然找不到这个类——iOS里对应的弹窗组件是UIAlertController。如果是macOS项目,那大概率是你没导入AppKit框架导致的。
下面分两种场景给你解决方案:
场景1:你的项目是iOS平台
直接把NSAlert换成UIAlertController就行,不过要注意SKScene本身不是UIViewController,得先拿到当前的视图控制器才能弹出弹窗。示例代码如下:
func showGameOverAlert() { // 创建UIAlertController let alert = UIAlertController( title: "Game over", message: "You won!", preferredStyle: .alert ) // 添加关闭按钮 let closeAction = UIAlertAction(title: "Close", style: .default) { _ in // 这里可以写点击关闭后的逻辑,比如返回菜单之类的 } alert.addAction(closeAction) // 获取当前根视图控制器并弹出弹窗 if let rootVC = self.view?.window?.rootViewController { rootVC.present(alert, animated: true, completion: nil) } }
场景2:你的项目是macOS平台
这种情况下NSAlert是可用的,你只需要在文件顶部导入AppKit框架,并且确保弹窗操作在主线程执行(UI操作必须在主线程):
// 别忘了导入这两个框架 import SpriteKit import AppKit class YourGameScene: SKScene { func showGameOverAlert() { // 切换到主线程执行弹窗操作 DispatchQueue.main.async { let alert = NSAlert() alert.addButton(withTitle: "Close") alert.messageText = "Game over" alert.informativeText = "You won!" alert.runModal() } } }
这样就能解决「unresolved identifier 'NSAlert'」的报错啦!
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

