12

10個のアイテムの配列があります。IndexOfObject要素番号9と要素番号10のXcodeに対して「」を呼び出すと、例外が返されます:「 NSRangeException

理由:'_ [_ NSCFArray objectAtIndex:] index:2147483647 overbounds(10)'。

以前からNSLog、2つの要素が配列に存在する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(iOS32ビットでは==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ビット整数の範囲は4,294,967,295。です。実際には、値は正または負になる可能性があるため、範囲は実際−2,147,483,648には+2,147,483,647です。

変数が負の値を格納するために呼び出されることは決してないことがわかっている場合は、それを符号なしとして宣言し、それによって(正の)範囲をに拡張でき0ます+4,294,967,295

unsignedintは次のように指定されます。

unsigned int myint;
于 2012-12-30T18:27:14.153 に答える