我试图在我的游戏中向社交媒体添加分享按钮以分享高分。我似乎无法弄明白,从各种其他答案中,我已经到达了这个代码(抛出了一个NSInternalInconsistencyException)。有任何想法吗?
let savedScore = UserDefaults.standard.value(forKey: "HighestScore") as! Int
let textToShare = "My highscore on Panda Pong is \(savedScore)! Can you beat that?"
let objectsToShare = [textToShare]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
activityVC.excludedActivityTypes = [UIActivityType.airDrop, UIActivityType.addToReadingList]
let vc = UIViewController(nibName: "testview", bundle: nil) as UIViewController
vc.present(activityVC, animated:true, completion:nil)
答案 0 :(得分:0)
正确的代码是:
let vc = self.view!.window!.rootViewController!
vc.present(activityVC, animated:true, completion: nil)
不完全确定原因,但是用一些语法搞砸了并得出了这个答案。
答案 1 :(得分:0)
你可以在spritekit
中这样做 ...
let rootViewController = view?.window?.rootViewController
rootViewController?.present(activityVC, animated:true, completion:nil)
而不是尝试实例化一个新的ViewController,只需使用rootViewController(GameViewController)。
我也建议不要做
这样的事情let savedScore = UserDefaults.standard.value(forKey: "HighestScore") as! Int
强制转换用户默认值(as!Int)。如果没有值,您将崩溃,因此将其更改为此
let savedScore = UserDefaults.standard.value(forKey: "HighestScore") as? Int ?? 0
您现在可以安全地检查UserDefaults值是否存在并且是Int(作为?Int),如果不存在,它将创建一个新的默认值(?? 0)。
此外,尝试将UserDefaults字符串键(" HighestScore")放入常量属性中,以避免拼写错误。
enum UserDefaultsKey: String {
case highscore = "HighestScore"
}
而不是像这样使用
UserDefaults.standard.value(forKey: UserDefaultsKey.highscore.rawValue)
希望这有帮助