Xcode/Objective C からのこれらの結果を説明できる人はいますか? 確かに、-2 が 31 より大きい値をテストするケースはありません。
(lldb) p dayOfMonth
(int) $37 = -2
(lldb) p (dayOfMonth > 31)
(bool) $38 = true
(lldb) p (dayOfMonth > (int)31)
(bool) $39 = true
(lldb) p (dayOfMonth > (float)31)
(bool) $40 = false
私はそのような真っ直ぐな間違った答えを見たことがなく、それがどのように誤解される可能性があるのか 想像できません. デバッガーが言うように、dayOfMonth は単なる int です。
追加する編集:失敗するコードは次のとおりです(無関係な行がいくつかカットされています):
NSRange monthdays = [self.calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:self.displayedDate];
int dayOfMonth = i+1-shift; // negative days are at end of prev month; days higher than length of month are in next
if (dayOfMonth < 1) cellView.dayLabel = prevMonthDays.length + dayOfMonth;
if (dayOfMonth > monthdays.length) cellView.dayLabel = dayOfMonth - monthdays.length;
if
dayOfMonth が負の場合、2 番目は true と評価されます。