Could not cast value of type 'UIView' (0x112484eb0) to 'SKView' (0x111646718)

21.3k views Asked by At

Could not cast value of type 'UIView' (0x112484eb0) to 'SKView' (0x111646718). I keep on getting this error. Can anyone help me because the line of code is there by default. I converted the SK game into the latest swift syntax using the xcode 7 beta. The compiler was missing a lot of things, that is why i came back to xcode 6. I have no red errors; but, the game crashes and says thread 1: signal SIGARBT. Any tips on the changes between swift 2 and the latest version of swift 1 that could have caused problems in the conversion to the latest swift syntax. Perhaps something that was converted, that I should change in xcode 6.3.2. I will delete the beta once this crash issue is resolved. There is probably an error in the code, because i got the same error when i copied the code onto a brand new xcode project. Thanks in advance!

let skView = self.view as! SKView
4

There are 4 answers

1
Aryaman Goel On BEST ANSWER

I finally fixed it! Instead of putting the functions in the GameViewController and calling them from game scene, I had to put the functions in gameScene and replace view with self.view!.

11
aramusss On

Go to your Storyboard, select your UIViewController that contains the SpriteKit game, and select the view from left menu:

enter image description here

Now go to Identity Inspector and make sure Class is SKView and not UIView:

enter image description here

You should now be able to compile this part of code from your UIViewController:

// Configure the view.
SKView * skView = (SKView *)self.view;

Or in Swift:

let skView = self.view as! SKView
2
Arin On

Simple fix. You just have to change the View in which every view controller your using from UIView to SKView.

0
marcel On

For those who are not wanting to use a Storyboard, you can simple create the view as an SKView in the ViewController's loadView function.

class ViewController: UIViewController {
  override func loadView() {
    self.view = SKView()
  }

  override func viewDidLoad() {
    let skView = view as! SKView
    ...
  }
}