NSInteger和int类型警告似乎不一致

时间:2014-07-10 19:26:47

标签: objective-c ios7 xcode5

我在一个程序中遇到类型错误警告,而不是另一个程序,但代码看起来与我相同。

首先,作为Obj C / IOS的​​新手,我以为我应该使用NSInteger而不是int。

这里有什么工作; (斯坦福大学193P课程的代码没有给我警告)

(我试图仅显示摘录以保持简单。)

CardMatchingGame.m

@interface CardMatchingGame()
property (nonatomic, readwrite) NSInteger score;
...

CardGameViewController.m

interface CardGameViewController ()

@property (weak, nonatomic) IBOutlet UISlider *resultsSlider;

...

self.scoreLabel.text = [NSString stringWithFormat:@"Score: %d", self.game.score];
....
int sliderValue = lroundf(self.resultsSlider.value);

在这里,我的代码以不同的游戏为模型进行了模拟。对我来说看起来一样,但我得到了类型反转警告:

BullsEyeGame.m

@interface BullsEyeGame ()

@property (nonatomic, readwrite) NSInteger score;

....

ViewController.m

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UISlider *sliderValue;

....

self.scoreLabel.text = [NSString stringWithFormat: @"%d", self.game.score]; //NSInteger should not be used as format aguments; add an explicit cast to unsigned long.

int slider = lroundf(self.sliderValue.value); //Implicit conversion warning here

我在这里缺少什么?

我理解的关键漏洞在哪里?

2 个答案:

答案 0 :(得分:0)

这并没有回答两个程序为什么表现不同的核心问题,但我通过以下方式修正了警告:

  1. 将lroundf()更改为round()

  2. 将格式说明符从%d更改为%ld。

答案 1 :(得分:0)

在第一个代码示例中,您使用属性(在.m文件中)定义分数,但在第二个代码示例中使用@property。如果这不是拼写错误,那就是两个程序之间的区别。

此外,差异可能取决于您如何为分数变量分配值。检查该区域是否也存在差异。