错误无法将 UIView 类型的值转换为 SKview

Error Could not cast value of type UIView to SKview

自从我在 iAds 中添加以来,我一直收到此错误。 "could not cast value of type 'UIView' (0x196afa530) to 'SKView' (0x19685f560)."

这是失败的代码,底部的代码是我的内部视图控制器代码……并不多。 我认为 at 也与此 iAds 代码有关。

    var interstitialAdView: UIView = UIView()

代码:

 override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
         let skView = self.view as! SKView
        self.canDisplayBannerAds = true
            skView.showsFPS = false
            skView.showsNodeCount = false
            skView.ignoresSiblingOrder = true
            scene.scaleMode = .AspectFill
            let scene: SKScene = GameScene(size: skView.bounds.size)
            skView.presentScene(scene)
       }
    }

所有ViewController代码:

  import UIKit
  import StoreKit
  import SpriteKit
  import GameKit
  import iAd

 extension SKNode {
class func unarchiveFromFile(file : String) -> SKNode? {
    if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
        var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!
        var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)

        archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
        let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameScene
        archiver.finishDecoding()
        return scene
    } else {
        return nil
    }
  }

}

class GameViewController: UIViewController, ADInterstitialAdDelegate{
var interstitialAd:ADInterstitialAd!

var interstitialAdView: UIView = UIView()
override func viewDidLoad() {
    super.viewDidLoad()


    loadInterstitialAd()

    ADBannerView()


    func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController!)
    {
        gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
    }




    var localPlayer = GKLocalPlayer()

    localPlayer.authenticateHandler = {(viewController, error) -> Void in

        if (viewController != nil) {
            let vc: UIViewController = self.view!.window!.rootViewController!
            vc.presentViewController(viewController, animated: true, completion: nil)
        }

        else {
            println((GKLocalPlayer.localPlayer().authenticated))

        }
    }





}
override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
         let skView = self.view as! SKView
        self.canDisplayBannerAds = true
            skView.showsFPS = false
            skView.showsNodeCount = false
            skView.ignoresSiblingOrder = true
            scene.scaleMode = .AspectFill
            let scene: SKScene = GameScene(size: skView.bounds.size)
            skView.presentScene(scene)



  }

}



override func shouldAutorotate() -> Bool {
    return true
}

override func supportedInterfaceOrientations() -> Int {
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
        return Int(UIInterfaceOrientationMask.AllButUpsideDown.rawValue)
    } else {
        return Int(UIInterfaceOrientationMask.All.rawValue)
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Release any cached data, images, etc that aren't in use.
}

override func prefersStatusBarHidden() -> Bool {
    return true
}

func loadInterstitialAd() {

    interstitialAd = ADInterstitialAd()

    interstitialAd.delegate = self





     }



func interstitialAdWillLoad(interstitialAd: ADInterstitialAd!) {



}



func interstitialAdDidLoad(interstitialAd: ADInterstitialAd!) {







    interstitialAdView = ADBannerView()

    interstitialAdView.frame = CGRectZero

    self.interstitialAdView.frame = CGRectMake(0, self.view.frame.size.height-self.interstitialAdView.frame.size.height, self.interstitialAdView.frame.size.width, self.interstitialAdView.frame.size.height)

    interstitialAdView.backgroundColor = UIColor.clearColor()

    self.view .addSubview(interstitialAdView)





    interstitialAd.presentInView(interstitialAdView)

    UIViewController.prepareInterstitialAds()

}



func interstitialAdActionDidFinish(interstitialAd: ADInterstitialAd!) {

    interstitialAdView.removeFromSuperview()



}



func interstitialAdActionShouldBegin(interstitialAd: ADInterstitialAd!, willLeaveApplication willLeave: Bool) -> Bool {

    return true

}



func interstitialAd(interstitialAd: ADInterstitialAd!, didFailWithError error: NSError!) {
    println(" iAds Did Fail with Error")


}



func interstitialAdDidUnload(interstitialAd: ADInterstitialAd!) {

    interstitialAdView.removeFromSuperview()

}



   }

同样的事情发生在我身上。您所要做的就是将所有 iAd 代码转移到您的 GameScene.swift 并将 self 更改为 self.view!.window!.rootViewController!哪里有错误。