2015-09-04 34 views
0

所以我完成了一個項目,當我跑它,它死機了,我得到了主題1:信號SIGABRT錯誤,我看了看說明,它給了我:Swift SpriteKit:線程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

是類型MCTPointLabel名 「highscoreLabel」 的標籤? – MaxKargin

+0

你是什麼意思? –

+0

是MCTPointLabel類型的節點'highscoreLabel'?編譯器認爲它是'SKLabelNode' – MaxKargin

回答

0

改變你的GameScene的聲明高分標籤內:

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

假設MCTPointsLabel從SKLabelNode繼承一切會正常工作。你必須確保,如果你強迫類型轉換,那麼你確實擁有一個類的對象。當你這樣說:

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

你強制轉換的標籤爲MCTPointLabel,而是因爲你的highscoreLabel之前爲SKLabelNode實際上宣告,你不能強制轉換和收到的錯誤。

希望這可以幫助,讓我知道你是否需要澄清。
編輯:代替試試這個:

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

我補充說,但它說「無法找到類型MCTPointLabel的初始值設定項,它接受...」 –

+0

哦,你沒有實現初始化程序?確定你實現了哪個初始化器? – MaxKargin

+0

林有點困惑。我不認爲我有一個初始化程序。 –

0

顯然childNodeWithName("highscoreLabel")不是MCTPointLable。

強制轉換(使用!)通常是可以避免的,並且很可能會導致運行時問題。您需要計算出childNodeWithName("highscoreLabel")的可能結果,並確保您處理所有可能性或找到您需要的其他信息。

+0

它不會讓我甚至沒有! –

+0

帶有標籤的節點是SKLabelNode而不是MCTPointLabel(在更新後的問題中可見)。這就是演員陣容失敗的原因(當你不強求時不允許)。 –