2017-02-18 12 views
0

私はゲーム内からソーシャルメディアに共有ボタンを追加して最高得点を共有しようとしています。私はそれを把握していないようで、さまざまな答えから、このコード(NSInternalInconsistencyExceptionをスローする)に着いた。何か案は?uiactivityviewcontroller with spritekit/skscene

let vc = self.view!.window!.rootViewController! 

vc.present(activityVC, animated:true, completion: nil) 

ない理由を正確に確認してください、しかし、いくつかの構文で周り台無しにし、この答えに到着しました:

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

に役立ちますので、

UserDefaults.standard.value(forKey: UserDefaultsKey.highscore.rawValue) 

希望のようにそれを使用するよりも! vcがnilのときにクラッシュしないようにする。 – crashoverride777

0

あなたはSpriteKitベース

... 
let rootViewController = view?.window?.rootViewController 
rootViewController?.present(activityVC, animated:true, completion:nil) 

の代わりにちょうどrootViewController(GameViewController)を使用して新しいのViewControllerをインスタンス化しようとする際に、このようにそれを行うことができます。

は、私はまた力で

let savedScore = UserDefaults.standard.value(forKey: "HighestScore") as! Int 

が(!intとして)ユーザデフォルト値をキャストするようなものをしないためにreccomendだろう。何の価値はまだありません場合は、(UserDefaults値が(?intとして)のIntを存在している場合は、安全にチェックしない場合、それは新しいデフォルト値を作成しますので、この

に変更し
let savedScore = UserDefaults.standard.value(forKey: "HighestScore") as? Int ?? 0 

クラッシュします?0)。

さらに、TypoSを避ける​​ために、UserDefaultsの文字列キー( "HighestScore")を定数プロパティに配置しようとします。

enum UserDefaultsKey: String { 
    case highscore = "HighestScore" 
} 

し、あなたが使用しないしたくない良い迅速な開発者であれば、これは

関連する問題