Objective c SpriteKit删除要重绘的精灵

Objective c SpriteKit删除要重绘的精灵,objective-c,sprite-kit,nodes,skspritenode,Objective C,Sprite Kit,Nodes,Skspritenode,目前在我的应用程序中,我一直在采用一种技术来移除/重新绘制某些精灵 例如,该应用程序是一个扑克应用程序。因此,当进行呼叫/提高/检查时,会有一块芯片放在玩家前面,上面有一个SKLabelNode包含赌注、检查等。。但是,删除上一个然后重新添加新的是不一致的,并且会导致许多EXC_BAD_访问错误。现在,我想我可以将它编程为嵌套搜索该节点,并更改值,而不是重新绘制。然而,它被多次使用,并且在某一点上依赖于将孩子从其父母那里移除 我想问的是,在不存在不一致崩溃可能性的情况下,实现这一点的最佳技术是什

目前在我的应用程序中,我一直在采用一种技术来移除/重新绘制某些精灵

例如,该应用程序是一个扑克应用程序。因此,当进行呼叫/提高/检查时,会有一块芯片放在玩家前面,上面有一个
SKLabelNode
包含赌注、检查等。。但是,删除上一个然后重新添加新的是不一致的,并且会导致许多EXC_BAD_访问错误。现在,我想我可以将它编程为嵌套搜索该节点,并更改值,而不是重新绘制。然而,它被多次使用,并且在某一点上依赖于将孩子从其父母那里移除

我想问的是,在不存在不一致崩溃可能性的情况下,实现这一点的最佳技术是什么

-(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]];
    }
}

没有足够的代码来解释您的问题,错误访问意味着您试图调用一个方法或在没有对象存在的情况下读取一个值。您是否将节点添加回场景?当移除你的芯片时,它是Gonether,这不一定是上面的问题,只是当一个精灵被重新绘制时,它有崩溃的倾向。i、 e,有时在重新绘制新文件后,remove将调用,并导致崩溃。节点被重新添加到场景中是的,并且使用与已删除节点相同的大多数实例重新绘制。@Knight0fDragon我或多或少地要求在执行此操作时坚持最佳做法?如果我这样做,我只需将1个芯片作为类中的一员预先制作,在需要时传递给每个玩家。如果没有玩家有芯片,那么我就把它从玩家身上移除。这样,您就不会在需要时不断地分配新芯片。没有足够的代码来破译您的问题,错误的访问意味着您试图调用一个方法或在没有对象存在时读取一个值。您是否将节点添加回场景?当移除你的芯片时,它是Gonether,这不一定是上面的问题,只是当一个精灵被重新绘制时,它有崩溃的倾向。i、 e,有时在重新绘制新文件后,remove将调用,并导致崩溃。节点被重新添加到场景中是的,并且使用与已删除节点相同的大多数实例重新绘制。@Knight0fDragon我或多或少地要求在执行此操作时坚持最佳做法?如果我这样做,我只需将1个芯片作为类中的一员预先制作,在需要时传递给每个玩家。如果没有玩家有芯片,那么我就把它从玩家身上移除。这样,您就不会在需要时不断地分配新芯片。
        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]]);
        }