2015-09-22 1 views
0

Depuis que j'ai ajouté iAds, je continue à recevoir cette erreur. "Impossible de lancer la valeur de type 'UIView' (0x196afa530) à 'SKView' (0x19685f560)."Erreur Impossible de convertir la valeur du type UIView en SKview

c'est le code qui échoue et le code en bas est mon code de contrôleur inter view .. ce qui n'est pas beaucoup. Je pense aussi à quelque chose à voir avec ce code pour iAds.

var interstitialAdView: UIView = UIView() 

code:

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) 
     } 
    } 

Tout le code 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() 

} 



    } 

Répondre

0

La même chose est arrivé à moi. Tout ce que vous avez à faire est de transférer tout votre code iAd sur votre GameScene.swift et de vous transformer en self.view! .window! .rootViewController! partout où il y a une erreur.