【发布时间】:2016-05-17 20:35:31
【问题描述】:
我很怀疑,为什么它可以正常工作:
NSInteger row = indexPath.row;
NSInteger preloadTrigger = self.nodes.count - 20;
if (row >= preloadTrigger) {
[self.loader loadNextposts];
}
这不会(只是跳过 if 语句):
if (indexPath.row >= self.nodes.count - 20) {
[self.loader loadNextposts];
}
当self.nodes.count - 20 的值为负时。
但是,当表达式的值为正时,它总是可以正常工作。
一个非常奇怪的行为,因为我看不到两个表达式的语义差异。
更新: 所以,我决定测试一下:
(lldb) po self.nodes.count - 20
18446744073709551601
(lldb) po preloadTrigger
-15
【问题讨论】:
-
试试 if (indexPath.row >= (self.nodes.count - 20)) {
-
我确定
-[NSArray count]返回一个NSUInteger(un已签名)。不确定减去20(not20u)是否应该将其提升为已签名(不是 C 律师...),但它闻起来像那个方向的东西...跨度> -
Avijit,不行,我一开始试过这个。
-
如果把第二行的NSInteger改成NSUInteger,还能用吗?
-
@tapani 你能解释一下,具体在哪一行?
标签: ios objective-c if-statement conditional nsinteger