用spritekit / skscene调用uiactivityviewcontroller

时间:2017-02-18 21:59:59

标签: swift sprite-kit uiactivityviewcontroller

我试图在我的游戏中向社交媒体添加分享按钮以分享高分。我似乎无法弄明白,从各种其他答案中,我已经到达了这个代码(抛出了一个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)

2 个答案:

答案 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) 

希望这有帮助