2014-12-11 45 views
1

我沿着這Spritekit教程http://code.tutsplus.com/tutorials/ios-sdk-build-a-facts-game-interface-creation--mobile-20764SKLabelNode罰球嘗試添加無節點錯誤

下他們建議在viewDidLoad方法添加一個計時器的文本。即在本教程中給出的代碼如下所示:

_timerLevel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"]; 
_timerLevel.text = @"30"; 
_timerLevel.fontSize = 70; 
_timerLevel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)+350); 
[self addChild:_timerLevel]; 

有一次,我跑行[個體經營的addChild:_timerLevel]錯誤「試圖尼羅河節點錯誤添加到父」被拋出。

而且_timerLevel聲明在接口

@property (nonatomic,weak) SKLabelNode* timerLevel; 

的場景initalised像這樣:

-(id) initWithSize:(CGSize)size inLevel:(NSInteger)level withPlayerLives:(int)lives { 
    if (self = [super initWithSize:size]) { 
     self.backgroundColor = [SKColor colorWithRed:0.35 green:0.25 blue:0.5 alpha:1.0]; 
     defaults = [NSUserDefaults standardUserDefaults]; 

     playerLives = lives; 
     playerLevel = level; 

     maximumTime = 30; 

    } 


    return self; 
} 

告訴我的錯誤是,_timerLevel尚未初始化,因此是零?我如何正確初始化?非常感謝

+0

添加您的_timerLevel內didMoveToView而不是viewDidLoad方法它。 – dragoneye 2014-12-11 05:10:36

回答

2

要麼刪除弱關鍵字:

@property (nonatomic) SKLabelNode* timerLevel; 

或者將標籤分配到一個局部變量第一:

SKLabelNode* timerLevel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"]; 
_timerLevel = timerLevel; 

與使用的弱這裏的問題是,初始化標籤,有後除非您將其分配給局部變量或刪除弱關鍵字,否則沒有強引用。否則,標籤將被初始化,返回並立即解除分配,並在下一行執行前立即設置爲零。

0

您不想在視圖控制器的ViewDidLoad函數中使用SKLabelNode代碼。你想在你創建的SKScene的didMoveToView函數中移動它。