2016-06-17 22 views
1

因此,我正在爲我開發的主要遊戲製作一些小型項目,但不知道爲什麼,每當我嘗試運行我的遊戲時,SIGABRT錯誤都會提示以下消息:NSInvalidUnarchiveOperationException在iOS 9.3上使用SpriteKit

*終止應用程序由於未捕獲的異常 'NSInvalidUnarchiveOperationException',原因:「* - [NSKeyedUnarchiver decodeObjectForKey:]:無法密鑰(根)解碼類的對象(GameScene);類可能以源代碼或沒有關聯性」

我已經添加了以下擴展到SKNode

extension SKNode { 
    class func unarchiveFromFile(_ file: NSString) -> SKNode? { 
     if let path = Bundle.main().pathForResource(file as String, ofType: "sks") { 
      do { 
       let sceneData = try Data(contentsOf: URL(fileURLWithPath: path), options: NSData.ReadingOptions.dataReadingMappedIfSafe) 
       let archiver = NSKeyedUnarchiver(forReadingWith: sceneData) 
       archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene") 
       let scene = archiver.decodeObject(forKey: NSKeyedArchiveRootObjectKey) as! GameScene 
       archiver.finishDecoding() 
       return scene 
      } catch { 
       print("ERROR1002") 
       return nil 
      } 
     } else { 
      print("ERROR001 - pathForResource not found") 
      return nil 
     } 
    } 
} 

我已經使用這個擴展在其他項目中,一切都跑了庫中進行定義像一個魅力,但現在在這一個。

當我的遊戲lanches,我GameViewController.swift文件被調用,並在我的viewDidLoad中方法我做到以下幾點:

import UIKit 
import SpriteKit 
import GameplayKit 




class GameViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     if let scene = GameScene.unarchiveFromFile(currentSKSFile) as? GameScene { 

      // Configure the view. 
      let skView = self.view as! SKView 
      skView.showsFPS = false 
      skView.showsNodeCount = false 

      /* Sprite Kit applies additional optimizations to improve rendering performance */ 
      skView.ignoresSiblingOrder = true 

      /* Set the scale mode to scale to fit the window */ 
      scene.scaleMode = .aspectFill 

      skView.presentScene(scene) 
     } 
    } 


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

    override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
     if UIDevice.current().userInterfaceIdiom == .phone { 
      return .landscape 
     } else { 
      return .all 
     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Release any cached data, images, etc that aren't in use. 
     print("didReceiveMemoryWarning ERRO - GameViewController.swift") 
    } 

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

} 

我調試的代碼,它崩潰上在下面一行擴展類我添加了:

let scene = archiver.decodeObject(forKey:NSKeyedArchiveRootObjectKey)as! GameScene

它會提示上述錯誤。

我正在運行Xcode 8 Beta + iOS 10,不,不是因爲這個原因,因爲我可以在沒有任何錯誤的情況下運行與此類設備上的其他項目中完全相同的擴展。

任何暗示什麼可能會導致此?

問候 - 伊凡

回答

0

不知何故,清理我的項目解決了我的問題!

我嘗試過不同的東西,錯誤在那裏,所以我已經清理它,錯誤不再存在。

我不知道爲什麼發生了,但它解決了。

無論如何感謝:)

相關問題