我在iPhone程序中遇到了一个特殊的问题.这是我的代码 -
在我的视图控制器的viewDidLoad中,我创建了一个数组
grades = [[NSArray arrayWithObjects:@"Grade 1", @"Grade 2", @"Grade 3", nil] retain];
Run Code Online (Sandbox Code Playgroud)
现在我有一个房产
@property (nonatomic) NSInteger selectedGradeIndex;
Run Code Online (Sandbox Code Playgroud)
我写了以下setter方法
- (void) setSelectedGradeIndex:(NSInteger)newValue
{
if(newValue >= [grades count])
{
NSLog(@"newValue = %d >= [grades count] = %d",newValue, [grades count]);
newValue = 0;
}
else if(newValue < 0)
{
NSLog(@"newValue = %d < 0",newValue);
newValue = [grades count] - 1;
}
selectedGradeIndex = newValue;
lblGrade.text= [grades objectAtIndex:selectedGradeIndex];
}
Run Code Online (Sandbox Code Playgroud)
在我的代码中的某个地方
self.selectedGradeIndex = -1;
Run Code Online (Sandbox Code Playgroud)
setter中的日志显示
newValue = -1 >= [grades count] = 6
Run Code Online (Sandbox Code Playgroud)
我很迷惑.当日志清楚地显示条件为假时,为什么控制进入第一个if条件.
我把二传手改成了
- (void) setSelectedGradeIndex:(NSInteger)newValue
{
int count = [grades count];
if(newValue >= count)
{
NSLog(@"newValue = %d >= count = %d",newValue, count);
newValue = 0;
}
else if(newValue < 0)
{
NSLog(@"newValue = %d < 0",newValue);
newValue = count - 1;
}
selectedGradeIndex = newValue;
lblGrade.text= [grades objectAtIndex:selectedGradeIndex];
}
Run Code Online (Sandbox Code Playgroud)
现在一切都按预期工作了.日志是
newValue = -1 < 0
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么早期的方法失败了吗?
当你将signed int(你的变量)与unsigned int(type的类型)进行比较时-[NSArray count],signed int被提升为unsigned.这个数字-1转换为一个非常大的unsigned int.因此,-1 > 6.
| 归档时间: |
|
| 查看次数: |
710 次 |
| 最近记录: |