Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用spritekit/skscene调用uiactivityviewcontroller_Swift_Sprite Kit_Uiactivityviewcontroller - Fatal编程技术网

Swift 使用spritekit/skscene调用uiactivityviewcontroller

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

我试图在游戏中添加一个共享按钮到社交媒体上,以共享高分。我似乎无法理解,从其他各种答案中,我得出了这段代码(它抛出了一个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)
正确的代码是:

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为零时不会崩溃。