Swift 使用spritekit/skscene调用uiactivityviewcontroller
我试图在游戏中添加一个共享按钮到社交媒体上,以共享高分。我似乎无法理解,从其他各种答案中,我得出了这段代码(它抛出了一个NSInternalInconsistencyException)。有什么想法吗Swift 使用spritekit/skscene调用uiactivityviewcontroller,swift,sprite-kit,uiactivityviewcontroller,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
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)
正确的代码是:
let vc = self.view!.window!.rootViewController!
vc.present(activityVC, animated:true, completion: nil)
不太清楚原因,但弄乱了一些语法,得出了这个答案。正确的代码是:
let vc = self.view!.window!.rootViewController!
vc.present(activityVC, animated:true, completion: nil)
不太清楚原因,但弄乱了一些语法,得出了这个答案。您可以在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
强制转换用户默认值(如!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)
希望这有帮助您可以在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
强制转换用户默认值(如!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)
如果您是一名优秀的swift开发人员,希望这对您有所帮助!以确保在vc为零时不会崩溃。如果你是一个优秀的swift开发人员,你不想不使用它!以确保在vc为零时不会崩溃。