因此,我正在爲我開發的主要遊戲製作一些小型項目,但不知道爲什麼,每當我嘗試運行我的遊戲時,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,不,不是因爲這個原因,因爲我可以在沒有任何錯誤的情況下運行與此類設備上的其他項目中完全相同的擴展。
任何暗示什麼可能會導致此?
問候 - 伊凡