12

我有一个包含 10 个项目的数组。当我为 9 号元素和 10 号元素调用“ IndexOfObject”时,Xcode 返回异常:“ NSRangeException

原因:'_[_NSCFArray objectAtIndex:] index:2147483647 超出界限(10)'。

从以前的NSLog中,我看到这两个元素存在于数组中但indexOfObject没有找到它们。为什么?

我的代码是:

    NSDictionary * headConfig =[avatarDictionaryToSave objectForKey:@"head_dictionary"];
    NSString * headImage =[headConfig objectForKey:@"layer_key"];
    NSString * pathFace =[[NSBundle mainBundle]pathForResource:@"Face" ofType:@"plist"];
    NSLog(@"%@", headImage);

    NSArray *arrayFace =[NSArray arrayWithContentsOfFile:pathFace];
    NSLog(@"the  elements are: %@", arrayFace);//here headImage is present
    int index =[arrayFace indexOfObject:headImage];
    NSLog(@"the index is %d", index);
4

3 回答 3

45

indexOfObject:NSNotFound当对象不存在于数组中时返回。NSNotFound定义为NSIntegerMax(在 iOS 32 位上 == 2147483647)。

因此,您正在寻找的对象似乎不存在。

于 2012-06-07T10:29:51.813 回答
0
     Please change the coding of adding the array values as I mentioned below.
    //  [arr_values addObject:[dictionary valueForKey:@"Name"]];
     [arr_values addObject:[NSString stringWithFormat:@"%@",[dictionary valueForKey:@"Name"]]];

   When target array elements are not in string format then while we using the 
indexOfObject then that value can't able to find in the target array. So please try to 
change the value of object as mentioned above while adding into array.
于 2018-11-07T20:06:57.247 回答
-1

默认情况下,假定整数是有符号的。

换句话说,编译器假定将调用一个整数变量来存储负数或正数。这限制了范围可以在任一方向上达到的范围。

例如,32 位 int 的范围为4,294,967,295. 在实践中,因为该值可能是正数或负数,所以范围实际上是−2,147,483,648+2,147,483,647

如果我们知道永远不会调用变量来存储负值,我们可以将其声明为无符号,从而将(正)范围扩展到0to +4,294,967,295

无符号整数指定如下:

unsigned int myint;
于 2012-12-30T18:27:14.153 回答