2014-08-27 4 views
1

Я пытаюсь загрузить SKEmitterNode из файла SKS, и я получаю эту ошибку:SKEmitterNode Краш

Terminating app due to uncaught exception 
'NSInvalidUnarchiveOperationException', 
reason: '*** -[NSKeyedUnarchiver decodeObjectForKey:]: 
cannot decode object of class (SKEditorScene)' 

Код:

var explosion = SKEmitterNode.emitterNodeWithName("Explosion") 

retval.addChild(explosion) 

метод расширения:

class func emitterNodeWithName(name: String) -> SKEmitterNode 
{ 
    return NSKeyedUnarchiver.unarchiveObjectWithFile(NSBundle.mainBundle().pathForResource(name, ofType: "sks")!) as SKEmitterNode 
} 

Любой идеи?

+1

Это связано с ошибкой, когда XCode обрабатывает файл .sks как сцену и разлагает ее. Это исправлено в XCode 6.1 Beta –

ответ

3

У меня такая же проблема, похоже на ошибку в текущей бета-версии. Вот обходной путь:

func particleEmitterWithName(name : NSString) -> SKEmitterNode? 
{ 
    let path = NSBundle.mainBundle().pathForResource(name, ofType: "sks") 

    var sceneData = NSData.dataWithContentsOfFile(path!, options: .DataReadingMappedIfSafe, error: nil) 
    var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData) 

    archiver.setClass(SKEmitterNode.self, forClassName: "SKEditorScene") 
    let node = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as SKEmitterNode? 
    archiver.finishDecoding() 
    return node 
} 
+0

Это сработало для меня. Благодаря! –

+0

Этот ответ блестящий. Функция 'setClass' кажется неизбежной, если вы попытаетесь передать заархивированный объект из приложения iOS в его экземпляр расширения Apple Watch. Даже если один и тот же пользовательский класс скомпилирован как для приложения iOS, так и для расширения, он не получает точного имени в двух бинарных файлах, и мне пришлось настроить его имя в расширении Apple Watch, используя этот ответ. Большое спасибо! – Romain

0

Я заметил, что авария произошла после того, как изменение некоторых атрибутов в редакторе Particle Emitter. Поэтому вы можете редактировать атрибуты в коде или в редакторе в Xcode 5, чтобы избежать сбоя. По-видимому, редактор в Xcode 6 искажает файл.

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

  • Нет связанных вопросов^_^