2016-06-17 6 views
1

Итак, я делаю небольшие проекты для крупной игры, которые я разрабатывал, но не зная почему, каждый раз, когда я пытаюсь запустить свою игру, появляется сообщение об ошибке SIGABRT со следующим сообщением:NSInvalidUnarchiveOperationException On 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) как! GameScene

И он предлагает ошибку, описанную выше.

Я запускаю Xcode 8 Beta + iOS 10, и нет, это не из-за этого, потому что я могу запустить то же самое расширение, используемое в других проектах на таких устройствах с бета-версиями без каких-либо ошибок.

Любой намек на то, что может быть причиной этого?

С уважением - Иван

ответ

0

Как-то уборка моего проекта решила мои проблемы!

Я пробовал разные вещи, и ошибки были там, поэтому я очистил его, и ошибки больше не было.

Я не знаю, почему это произошло, но оно решено.

Спасибо в любом случае :)

Смежные вопросы