我在一个程序中遇到类型错误警告,而不是另一个程序,但代码看起来与我相同。
首先,作为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
我在这里缺少什么?
我理解的关键漏洞在哪里?
答案 0 :(得分:0)
这并没有回答两个程序为什么表现不同的核心问题,但我通过以下方式修正了警告:
将lroundf()更改为round()
将格式说明符从%d更改为%ld。
答案 1 :(得分:0)
在第一个代码示例中,您使用属性(在.m文件中)定义分数,但在第二个代码示例中使用@property。如果这不是拼写错误,那就是两个程序之间的区别。
此外,差异可能取决于您如何为分数变量分配值。检查该区域是否也存在差异。