2015-09-04 1 views
0

Итак, я закончил проект, и когда я запустил его, и он разбился, и я получил сообщение об ошибке 1: сигнал SIGABRT, и я посмотрел описание, и это дало мне следующее:Swift SpriteKit: Thread 1: сигнал SIGABRT. Не может отличить значение типа SKLabelNode?

Не удалось отличить значение типа «SKLabelNode» (0x108ed0b78) - «Koala_Hop.MCTPointLabel» (0x108091da0). (lldb)

для этой строки кода:

func loadHighscore() { 
    let defaults = NSUserDefaults.standardUserDefaults() 
    let highscoreLabel = childNodeWithName("highscoreLabel") as! MCTPointLabel //line with error 
    highscoreLabel.setTo(defaults.integerForKey("highscore")) 

Действительно смущен, нужна помощь выяснить это! Заранее спасибо!

**EDIT**: The declaration of highscoreLabel: 
     func addPoints() { 
    let pointsLabel = MCTPointLabel(num: 0) 
    pointsLabel.fontColor = UIColor.brownColor() 
    pointsLabel.position = CGPointMake(30.0, view!.frame.size.height - 40) 
    pointsLabel.name = "pointsLabel" 
    addChild(pointsLabel) 


    let highScoreLabels = MCTPointLabel(num: 0) 
    highScoreLabels.position = CGPointMake(view!.frame.size.width - 40, view!.frame.size.height - 40) 
    addChild(highScoreLabels) 

    let highscoreLabel = SKLabelNode(text: "High Score") 
    highscoreLabel.fontColor = UIColor.brownColor() 
    highscoreLabel.fontSize = 16.0 
    highscoreLabel.fontName = "Chalkduster" 
    highscoreLabel.name = "highscoreLabel" 
    highscoreLabel.position = CGPointMake(620, 310) 
    addChild(highscoreLabel) 

    } 
+0

ваш ярлык с именем "highscoreLabel" типа MCTPointLabel? – MaxKargin

+0

Что это значит? –

+0

является узлом 'highscoreLabel' типа MCTPointLabel? компилятор считает его «SKLabelNode» – MaxKargin

ответ

0

изменение внутри вашего GameScene декларации для высокой наклейки оценки:

let highscoreLabel = MCTPointsLabel(text: "High Score") 

Предполагая, что MCTPointsLabel наследует от SKLabelNode все будет работать нормально. Вы должны убедиться, что если вы вынудите typecast класс, который у вас действительно есть, есть объект этого класса. Когда вы это сказали:

let highscoreLabel = childNodeWithName("highscoreLabel") as! MCTPointLabel 

Вы типаж этикетки как MCTPointLabel, но потому, что ваш highscoreLabel прежде, чем был на самом деле объявлен как SKLabelNode, вы не были в состоянии типажа и получили ошибку.

Надеюсь, что это поможет, дайте мне знать, если вам нужно разъяснение.
Edit: Попробуйте вместо этого:

var highscoreLabel = MCTPointsLabel(num: 0) 
highscoreLabel.text = "High Score" 
+0

Я добавил это, но он говорит: «Не удается найти инициализатор для типа MCTPointLabel, который принимает ...» –

+0

oh вы не реализовали этот инициализатор? Хорошо, какой инициализатор вы реализовали? – MaxKargin

+0

Im видa смущенный. Я не думаю, что у меня есть инициализатор. –

0

Ясно childNodeWithName("highscoreLabel") не является MCTPointLable.

Принудительные приводы (с !) обычно можно избежать и могут привести к проблемам времени выполнения. Вам нужно выяснить, какие возможные результаты могут быть сделаны childNodeWithName("highscoreLabel"), и убедитесь, что вы обрабатываете все возможности или находите нужную вам информацию по-другому.

+0

Это не позволит мне даже запустить его без! –

+0

Узел с меткой - это SKLabelNode, а не MCTPointLabel (отображается в обновленном вопросе). Вот почему приказ не работает (не разрешается, когда вы его не навязываете). –

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