这可能是显而易见的,但我看不到它......
NSLog(@"nthObject = %i, [mutableFetchResults count] - 1 = %i", nthObject, [mutableFetchResults count] - 1);
if (nthObject <= [mutableFetchResults count] - 1) {
MyObject *myObject = [mutableFetchResults objectAtIndex:nthObject];
mutableFetchResults的计数为零,因此[mutableFetchResults count] - 1 = -1且nthObject为0.这由Log记录。
nthObject是传递给方法的int。
所以of语句应该说if(0&lt; = -1)因此不会触发MyObject * myObject = [mutableFetchResults objectAtIndex:nthObject]行,但是当它尝试访问时它会导致崩溃空数组。
有什么想法吗?
非常感谢,
克里斯。
答案 0 :(得分:8)
我假设mutableFetchResults
是NSMutableArray
(NSArray
的子类)。 count
成员NSUInteger
是未签名的,因此[mutableFetchResults count] - 1
不会为负数 - 它会变成一个非常大的数字。
将您的测试更改为:
if (nthObject < [mutableFetchResults count])
答案 1 :(得分:2)
[mutableFetchResults count]
是无符号整数吗?格式字符串中的“%i”表示将其打印为带符号的int,但这并不意味着它是......
答案 2 :(得分:1)
[mutableFetchResults count]
返回NSUInteger。
如果count为0,则NSUInteger上的0 - 1将不为-1,它将“包裹”并且是一个大数字。
答案 3 :(得分:1)
[mutableFetchResults count]可能是this,因此它产生无符号整数。它将回绕到无符号整数的最大值,您的i
也将被提升为无符号类型。
你的比较最终会像(0&lt; 0xffffffff)。