令人费解:如果声明<=未按预期工作

Chr*_*ris 1 iphone debugging objective-c

这可能是显而易见的,但我看不到它......

NSLog(@"nthObject = %i, [mutableFetchResults count] - 1 = %i", nthObject, [mutableFetchResults count] - 1);
if (nthObject <= [mutableFetchResults count] - 1) {
    MyObject *myObject = [mutableFetchResults objectAtIndex:nthObject];
Run Code Online (Sandbox Code Playgroud)

mutableFetchResults的计数为零,因此[mutableFetchResults count] - 1 = -1且nthObject为0.这由Log证实.

nthObject是传递给方法的int.

因此,of语句应该说if(0 <= -1)因此不会触发MyObject*myObject = [mutableFetchResults objectAtIndex:nthObject]行,但是它会在尝试访问空数组时导致崩溃.

有任何想法吗?

非常感谢,

克里斯.

Mic*_*urr 8

我假设那mutableFetchResultsNSMutableArray(子类NSArray).该count成员是一个NSUInteger未签名的成员,所以[mutableFetchResults count] - 1不会消极 - 它包裹成为一个非常大的数字.

将您的测试更改为:

if (nthObject < [mutableFetchResults count])
Run Code Online (Sandbox Code Playgroud)