質問

ノービー質問.. NSARRAYまたはNSMUTABLEARRAYのインデックスが存在するかどうかを確認する最善の方法は何ですか。私はいたるところではありません!!

これは私が試したものです:

if (sections = [arr objectAtIndex:4])
{
    /*.....*/
}
.

または

sections = [arr objectAtIndex:4]
if (sections == nil)
{
    /*.....*/
}
.

しかし両方とも「範囲外」というエラーが発生していない

(それは私のための解決策ではないので、捕獲してみてください)

事前感あり

役に立ちましたか?

解決

if (array.count > 4) {
    sections = [array objectAtIndex:4];
}
.

他のヒント

整数索引(E.i)がある場合は、この

のような配列境界をチェックすることで、一般的にこのエラーを防ぐことができます。
int indexForObjectInArray = 4;
NSArray yourArray = ...

if (indexForObjectInArray < [yourArray count])
{
    id objectOfArray = [yourArray objectAtIndex:indexForObjectInArray];
}
.

NSARRAYは 0からn-1の

順次順序です。

あなたは超過制限を持つaccess itemを作成しようとし、arraynilです。

編集:上記の@ schの回答NSArrayがそれに存在するかどうかをチェックするかどうかをチェックする方法を確認できます。

MIN演算子を使用して、この[array objectAtIndex:MIN(i, array.count-1)]のように静かに失敗し、配列内の次のオブジェクトまたは最後のオブジェクトを取得することができます。たとえば文字列を連結したい場合に便利です。

NSArray *array = @[@"Some", @"random", @"array", @"of", @"strings", @"."];
NSString *concatenatedString = @"";
for (NSUInteger i=0; i<10; i++) {  //this would normally lead to crash
    NSString *nextString = [[array objectAtIndex:MIN(i, array.count-1)]stringByAppendingString:@" "];
    concatenatedString = [concatenatedString stringByAppendingString:nextString];
    }
NSLog(@"%@", concatenatedString);
.

結果:「弦のいくつかのランダムな配列。。。。」

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top