web-dev-qa-db-ja.com

NSArrayからオブジェクトのインデックスを取得しますか?

indexOfObjectメソッドを使用して配列のインデックスを取得しようとしていますが、インデックスをテストするために値を記録しようとすると、ガベージ値が取得されます。テスト目的で値を持つ配列があります{57,56,58..}は、たとえば56のインデックスを取得し、

NSNumber *num = [NSNumber numberWithInteger:56];
NSInteger Aindex = [myArray indexOfObject:num];
NSLog(@" %d",Aindex);

私が得る値は2323421のようなものです。何が間違っているのでしょうか?

66
hemant

indexOfObjectによって返されるインデックスは、オブジェクトが発生した最初のインデックスになります。等価性はisEqualメソッドを使用してテストされます。
取得するガベージ値は、おそらくNSNotFoundと等しくなります。
_anIndexをテストしてみてください。あなたが探している番号はおそらくあなたの配列にはありません:

NSNumber *num=[NSNumber numberWithInteger:56];
NSInteger anIndex=[myArray indexOfObject:num];
if(NSNotFound == anIndex) {
    NSLog(@"not found");
}

または、配列の内容をログに記録して確認してください:

NSLog(@"%@", myArray);
143
user866214

皆さん、

オブジェクトが配列内で見つからない場合、indexOfObjectメソッドは「ガベージ」値を返しません。多くのシステムは、アイテムが見つからない場合、-1のインデックスを返します。

ただし、IOS-indexOfObjectはUNSIGNED int(別名NSUInteger)を返すため、返されるインデックスはゼロ以上である必要があります。「ゼロ」は有効なインデックスであるため、オブジェクトが見つからなかったことを呼び出し元に示します-合意された定数値を返すことを除き、全員がテストできます。この定数で合意された値はNSNotFoundと呼ばれます。

メソッド:

- (NSUInteger)indexOfObject:(id)anObject;

オブジェクトが配列になかった場合、NSNotFoundを返します。 NSNotFoundは非常に大きなPOSITIVE整数です(通常は1からプラットフォームの最大整数を引いたもの)。

39
joe
NSNumber *num1 = [NSNumber numberWithInt:56];
    NSNumber *num2 = [NSNumber numberWithInt:57];
    NSNumber *num3 = [NSNumber numberWithInt:58];
    NSMutableArray *myArray = [NSMutableArray arrayWithObjects:num1,num2,num3,nil];
    NSNumber *num=[NSNumber numberWithInteger:58];

    NSInteger Aindex=[myArray indexOfObject:num];

    NSLog(@" %d",Aindex);

正しい出力が得られますが、オブジェクトをur配列に格納することで何か間違ったことをしている可能性があります。

6
iCoder4777

これを試してください:

NSArrayのindexOfObject: 方法。次のような:

NSUInteger fooIndex = [someArray indexOfObject: someObject];
5

Swiftとオプションを使用している場合は、ラップされていないことを確認してください。オプションであるオブジェクトのインデックスを検索することはできません。

1
Josh O'Connor

indexOfObject methordは、文字列が@ "Test"のようであり、@ "TEST"のように見つかった場合、その配列内の対応する文字列のインデックスを取得します。

0
Jayasabeen

確認しました。私にとってはうまく機能します。配列に特定の番号があるかどうかを確認してください。要素が存在しない場合、そのようなガベージ値を返します。

0
visakh7