我有一段代码,其中我想要为TableView单元格提供不同的accessoryView,基于该单元格条目的编号。我设置的代码是:
NSInteger warriors = [entry.prayerWarriors intValue];
if (warriors == 0) {
//Do nothing
//NSLog(@"0");
}
else if (0 < warriors < 50) {
cell.accessoryView = firstLevel;
// NSLog(@"50");
}
else if (51 < warriors < 100) {
cell.accessoryView = secondLevel;
// NSLog(@"100");
}
else if (101 < warriors < 500) {
cell.accessoryView = thirdLevel;
// NSLog(@"500");
}
else {
cell.accessoryView = fourthLevel;
// NSLog(@"A Lot");
}
然而,它总是只返回战士的第一个条目== 0.我做错了什么?
答案 0 :(得分:2)
而不是这样做......
else if (0 < warriors < 50) {
cell.accessoryView = firstLevel;
// NSLog(@"50");
}
这样做......
else if (0 < warriors && warriors < 50) {
cell.accessoryView = firstLevel;
// NSLog(@"50");
}
修改强>
要回答你的评论...你可能意味着在那里有一些&lt; =或&gt; =,因为当战士等于你的if条件(50,100或500)的边界时,它会转到最后一个。
你可能希望它看起来像这样......
NSInteger warriors = [entry.prayerWarriors intValue];
if (warriors == 0) {
//Do nothing
//NSLog(@"0");
}
else if (0 < warriors && warriors <= 50) {
cell.accessoryView = firstLevel;
// NSLog(@"50");
}
else if (50 < warriors && warriors <= 100) {
cell.accessoryView = secondLevel;
// NSLog(@"100");
}
else if (100 < warriors && warriors <= 500) {
cell.accessoryView = thirdLevel;
// NSLog(@"500");
}
else {
cell.accessoryView = fourthLevel;
// NSLog(@"A Lot");
}
答案 1 :(得分:1)
声明
if (0 < warriors < 50)
评估与您想象的不同。第一部分
(0 < warriors)
计算为布尔值,并将该布尔值与50进行比较。
所以,你需要这样做:if (0 < warriors && warriors < 50)
答案 2 :(得分:0)
其他答案对后来需要逻辑的案例提出了好的观点,但是如果你遇到if (warriors == 0) {
,那么你的对象entry.prayerWarriors
很可能是零。放一个断点并将其打印出来。 (并打印出它的类以确保其符合预期)
同样轻微但习惯于转换我猜测的是NSNumber并不是使用与变量相同的类型。由于您正在写入NSInteger,因此应将intValue替换为integerValue
答案 3 :(得分:0)
为清楚起见,我更喜欢在每个条件中首先放置变量并封装条件的每个部分:
if (warriors == 0) {
//Do nothing
NSLog(@"0");
}
else if ((warriors > 0) && (warriors < 50))
{
cell.accessoryView = firstLevel;
NSLog(@"50");
}
else if ((warriors > 51) && (warriors < 100)) {
cell.accessoryView = secondLevel;
NSLog(@"100");
}
else if ((warriors > 101) && (warriors < 500)) {
cell.accessoryView = thirdLevel;
NSLog(@"500");
}
else {
cell.accessoryView = fourthLevel;
NSLog(@"A Lot");
}
请确保你已经有足够的条件来解决这些问题。
答案 4 :(得分:0)
您不需要if
级联:
您可以将关卡存储一次
NSArray *levels = @[firstLevel, secondLevel, thirdLevel, fourthLevel];
并使用索引:
if( warriors > 0) {
cell.accessoryView = levels[(warriors-1) / 50]
}
但如果你希望有if
级联,则不必仔细检查:
NSInteger warriors = [entry.prayerWarriors intValue];
if (warriors == 0) {
//Do nothing
//NSLog(@"0");
}
else if (warriors <= 50) {
cell.accessoryView = firstLevel;
// NSLog(@"50");
}
else if (warriors <= 100) {
cell.accessoryView = secondLevel;
// NSLog(@"100");
}
else if (warriors <= 500) {
cell.accessoryView = thirdLevel;
// NSLog(@"500");
}
else {
cell.accessoryView = fourthLevel;
// NSLog(@"A Lot");
}
如果您在其他地方,则已经测试过前一个条件失败。(这就是其他意思。)