gpt4 book ai didi

objective-c - 具有整数值的 NSDictionary

转载 作者:太空狗 更新时间:2023-10-30 03:13:53 25 4
gpt4 key购买 nike

我正在开发一款怪物游戏。每个人都有一个统计数据列表,这些数据都将是整数。我可以将每个统计信息设置为它自己的变量,但我更愿意将它们保存在 NSDictionary 中,因为它们都是相关的。当我尝试更改每个统计数据的值时遇到问题。

我有什么:

-(id) init {
self = [super init];
if(self) {
stats = [NSDictionary dictionaryWithObjectsAndKeys:
@"Attack", 0,
@"Defense", 0,
@"Special Attack", 0,
@"Special Defense", 0,
@"HP", 0, nil];
}
return self;
}

我想做什么

-(void) levelUp {
self.level++;
[self.stats objectForKey:@"Attack"] += (level * 5);
[self.stats objectForKey:@"Defense"] += (level * 5);
[self.stats objectForKey:@"Special Attack"] += (level * 5);
[self.stats objectForKey:@"Special Defense"] += (level * 5);
[self.stats objectForKey:@"HP"] += (level * 5);
}

我遇到的错误

Arithmetic on pointer to interface 'id', which is not a constant size in non-fragile ABI

所以对我来说很明显,我遇到问题的原因是我从 objectForKey 返回一个对象而不是一个整数。所以我尝试对我得到的对象执行 intValue 方法,但这给了我另一个错误,具体来说:

Assigning to 'readonly' return result of an objective-c message not allowed

我不知道如何解决这个问题。有什么帮助吗?放弃将它们全部存储在一起并为每个统计数据使用一个 int 属性会更好吗?

最佳答案

  1. 您只能在 Cocoa 集合类中存储对象,而不能存储基元,因此要存储数字,您需要使用 NSNumber 对象。
  2. 如果您想稍后更改内容,则需要使用 NSMutableDictionary
  3. 您对 dictionaryWithObjectsAndKeys 的调用已颠倒键和值。
  4. 你的 stats 对象没有被保留,所以它会在下一次运行循环中被释放(如果你使用手动引用计数的话)。

你想要:

stats = [[NSMutableDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:0], @"Attack",
[NSNumber numberWithInt:0], @"Defense",
[NSNumber numberWithInt:0], @"Special Attack",
[NSNumber numberWithInt:0], @"Special Defense",
[NSNumber numberWithInt:0], @"HP",
nil] retain];

为了更改值,您需要创建一个新的 NSNumber 对象,因为它们是不可变的,例如:

NSNumber *num = [stats objectForKey:@"Attack"];
NSNumber *newNum = [NSNumber numberWithInt:[num intValue] + (level * 5)];
[stats setObject:newNum forKey:@"Attack"];

如果你问我的话,一切都很乏味;一定有更简单的方法,例如创建一个 Objective-C 类来存储和操作这些东西如何?

关于objective-c - 具有整数值的 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11352486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com