-1

我在 iPhone 上使用 cocos2d,我设置了一个单例来存储玩家的所有数据和变量,我需要知道这是否可行,所以在伪代码中它会是这样的:

players * playersDataManager = [players playersSaveDataManager];
selected = "sword"
name = (@"%@AttRange",selected);
AttRange = playersDataManager.name;

会根据选择的玩家而name改变,因此 `AttRange 也会改变。我只是不知道如何在实际代码中设置它。这是我正在使用的实际代码:

-(void)showAttackRange:(NSMutableString *)selected {
    players * playersDataManager = [players playersSaveDataManager];
    NSMutableString * name1 = [NSMutableString stringWithString:@"MaxRange"];
    [name1 insertString:selected atIndex:0];

    int r = [playersDataManager valueForKey:name1];
    NSLog(@"%@%i",name1,r);
}
4

1 回答 1

3

它被称为“键值编码”

要在您的示例代码中使用它:

Players * playersDataManager = [Players playersSaveDataManager];
NSString *selected = @"sword"; 
NSString *propertyName = [NSString stringWithFormat:@"%@AttRange", selected);
AttRange value = [playersDataManager valueForKey:propertyName];

假设您的Players类具有类型和名称的属性,该属性AttRange swordAttRange@synthesized带有默认访问器的,或者,如果您为属性指定了自定义访问器,它们将遵循预期的命名方案。

(有关 KVC 在访问器命名方案方面的期望的更多信息,请阅读文档...)

Apple 文档:键值编码编程指南

编辑:使用 KVC 获取标量值返回一个NSNumber对象:Apple Documentation -> KVC Scalar and Structure support

于 2012-08-07T16:51:22.387 回答