【发布时间】:2014-09-23 12:26:42
【问题描述】:
我有一个存储在全局 int 变量中的分数。我想在每次游戏结束时将每个新分数添加到数组中。因此,代码如下所示:
@implementation MainScene{
NSInteger *_scorevalue;
NSMutableArray *_scores;
}
在 didLoad 方法中:
[[NSUserDefaults standardUserDefaults] setObject:_scores forKey:@"gameScores"];
游戏过程中_scorevalue的值会发生变化(物体碰撞时,但没关系):
_scorevalue=_scorevalue + 10;
游戏结束时:
[_scores addObject:_scorevalue];
Xcode 在这里显示了一个问题:“非 Objective-C 指针类型 int 到 id 类型参数的隐式转换”。
我尝试将 _scorevalue 类型更改为在实现中浮动(结果相同)。但是当我改用 NSNumber 时,[_scores addObject:_scorevalue]; 附近的问题消失了,_scorevalue=_scorevalue + 10; 附近出现了新问题:“指向接口 NSNumber 的指针的算术,这对于该架构和平台来说不是一个恒定的大小”。
你能给我解释一下吗?如何解决这一切?!
编辑 Rob 的答案:
实施:
NSInteger _scorevalue;
游戏结束时:
NSNumber *_scoreNumber= [NSNumber numberWithInteger:@(_scorevalue)]; // Xcode shows warning:
// "Incompatible pointer to integer conversion sending NSNumber to parameter of type NSInteger(aka // int)"
[_scores addObject:_scoreNumber];
编辑:nburk 显示更好(没有警告):
[_scores addObject:@(_scorevalue];)
【问题讨论】:
标签: objective-c pointers nsmutablearray int nsarray