目前在我的应用程序中,我一直在采用一种技术去除/重新绘制某些精灵。
在示例中,该应用程序是一个扑克应用程序。因此,当进行一次通话/加注/检查时,有一个芯片被放置在玩家的前面,其中SKLabelNode
包含下注,检查等。但是,删除前一个然后重新添加new不一致并导致很多EXC_BAD_ACCESS错误。现在,我想我可以将它编程为嵌套搜索该节点并更改值而不是重绘。但是,它在多个场合使用,并且在某些时候依赖于将孩子从其父母那里移除。
我问的是,如果没有不一致的崩溃可能性,最好的技术是什么??
-(void)removePreviousChips:(NSString *)player {
NSString *string = [NSString stringWithFormat:@"chipLabel:%@", player];
SKNode *node = [tableSprite childNodeWithName:string];
[node removeFromParent];
}
-(void)updateChipStacksAndPlayerPositionsWith:(NSDictionary *)dict {
// [tableSprite removeAllChildren];
for (int i = 0; i < 8; i++) {
//loop through seats taken if value then draw.
if (![[dict valueForKey:_seatNames[i]] isEqualToString:@""]) {
[self drawAvatarWithPlayerName:[dict valueForKey:_seatNames[i]] withSeatPosition:[[seatPositions valueForKey:_seatNames[i]] CGPointValue] withChipStack:[[dict valueForKey:@"startingChips"] intValue]];
}
}
if ([self displayStartGameButton]) {
[startGameBG runAction:[SKAction fadeAlphaTo:1 duration:0.5]];
} else {
[startGameBG runAction:[SKAction fadeAlphaTo:0 duration:0.5]];
}
}
他们的两个例子是使我的应用程序崩溃的一致方法。
修改
例如,更好的方法是在要求将节点从其父节点中删除并重新绘制之前检测节点是否存在。然而,检测它的存在并不适合我 SKNode *node = [tableSprite childNodeWithName:[dict valueForKey:_seatNames[i]]];
if (node) {
NSLog(@"node for %@ exists", [dict valueForKey:_seatNames[i]]);
} else {
NSLog(@"node for %@ doesn't exist", [dict valueForKey:_seatNames[i]]);
}