2017-02-18 2 views
0

내 게임에서 소셜 미디어에 공유 버튼을 추가하여 최고 점수를 공유하려고합니다. 알아낼 수없는 것, 그리고 여러 가지 다른 대답에서이 코드 (NSInternalInconsistencyException을 throw합니다)에 도착했습니다. 어떤 아이디어?uiactivityviewcontroller with spritekit/skscene

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

올바른 코드는 다음과 같습니다 이유는 정확히 모르겠지만, 어떤 구문 주위에 엉망이 답변에 도착

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

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

하지 않습니다.

+0

을 할 수 있도록

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

희망처럼 사용! vc가 nil 일 때 충돌하지 않도록하십시오. – crashoverride777

0

당신은 대신 새의 ViewController 그냥 rootViewController (GameViewController)를 사용하여 인스턴스화하려고의

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

spritekit

에서이 방법을 수행 할 수 있습니다.

는 또한 힘

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

이 (! int로서) 사용자의 기본 설정 값을 캐스팅 등의 일을하지 않도록 권하고있다. 값이 아직 그래서 UserDefaults 값 (? int로서) int를 존재하고있는 경우 이제 안전하게 확인이

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

으로 변경하지 그렇지 않은 경우는 새로운 디폴트 값을 생성합니다이 경우 (충돌합니다 0).

또한 TypoS를 피하기 위해 UserDefaults String 키 ("HighestScore")를 상수 속성에 넣으십시오.

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

및보다 당신이 사용하지 싶지 않아 좋은 신속 개발자의 경우이