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

时间:2015-09-22 18:17:46

标签: xcode swift uiview iad skscene

自从我添加iAds后,我一直收到此错误。 "无法施放类型的价值' UIView' (0x196afa530)到' SKView' (0x19685f560)"

这是失败的代码,底部的代码是我的视图间控制器代码..这并不多。 我认为这也与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()

}



   }

1 个答案:

答案 0 :(得分:0)

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