Xcode 错误无法将UIView类型的值强制转换为SKview
自从我加入iAds后,我就一直犯这个错误。无法将“UIView”(0x196afa530)类型的值强制转换为“SKView”(0x19685f560) 这是失败的代码,底部的代码是我的视图间控制器代码。。这并不多。 我认为at也与iAds的代码有关Xcode 错误无法将UIView类型的值强制转换为SKview,xcode,swift,uiview,iad,skscene,Xcode,Swift,Uiview,Iad,Skscene,自从我加入iAds后,我就一直犯这个错误。无法将“UIView”(0x196afa530)类型的值强制转换为“SKView”(0x19685f560) 这是失败的代码,底部的代码是我的视图间控制器代码。。这并不多。 我认为at也与iAds的代码有关 var interstitialAdView: UIView = UIView() 代码: override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews
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代码转移到你的GameSecene.swift并将self改为self.view!。窗口!。rootViewController!无论哪里出错。同样的事情也发生在我身上。你所要做的就是将你所有的iAd代码转移到你的GameSecene.swift并将self改为self.view!。窗口!。rootViewController!无论哪里有错误