从NSString中创建变量名

时间:2011-12-04 11:20:22

标签: objective-c cocos2d-iphone

我有一个for循环,其中必须创建9个六边形(hexagon1到hexagon9)......但我不能使用hexString作为Sprite的名称,因为它是一个NSString,对吧?那我怎么能做对的?

hexString [<- I want the for loop to generate "hexagon1", then "hexagon2" and so on instead of the NSString] = [self createHexagon:ccp(xVal,yVal) :i];

int hexCount = [[[itemPositions valueForKey:myString]valueForKey:@"hexposition"] count];

    for (int i=1;i<=hexCount;i++){
        NSString *hexString = [NSString stringWithFormat:@"hexagon%d",i];
        NSNumber *generatedXVal = [[[[itemPositions valueForKey: myString ]valueForKey:@"hexposition"] valueForKey: hexString]valueForKey: @"xVal"];
        int xVal = [generatedXVal integerValue];
        NSNumber *generatedYVal = [[[[itemPositions valueForKey: myString ]valueForKey:@"hexposition"] valueForKey: hexString ]valueForKey: @"yVal"];
        int yVal = [generatedYVal integerValue];

        hexString = [self createHexagon:ccp(xVal,yVal) : i];
        NSLog(@"%@", hexString);
    }

3 个答案:

答案 0 :(得分:3)

这是不可能的,因为你没有声明变量。解决这个问题的方法是使用NSArray并将数据保存到数组而不是制作变量列表。

答案 1 :(得分:1)

使用NSMutableDictionary

for (int i=1;i<=hexCount;i++){
    NSString *hexString = [NSString stringWithFormat:@"hexagon%d",i];
    CCSprite *sprite = [self doSomethingToGetSprite];

    [mutableDictionary setObject:sprite forKey:hexString];
}        

稍后您可以使用以下方法迭代字典中的所有精灵:

for (NSString *key in mutableDictionary) {
    CCSprite *sprite = [mutableDictionary objectForKey:key];
    [self doStuffWithSprite:sprite];
}

顺便说一句,你为什么要覆盖你在这里指定的hexString

NSString *hexString = [NSString stringWithFormat:@"hexagon%d",i];

这里有一个:

hexString = [self createHexagon:ccp(xVal,yVal) : i];

该方法调用是一个明显的语法错误,其中悬挂: i部分。

答案 2 :(得分:0)

你可以使用NSSelectorFromString吗?