NSARRAYが範囲外のチェック
-
16-12-2019 - |
質問
ノービー質問.. 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
を作成しようとし、array
はnil
です。
編集:上記の@ 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);
.
結果:「弦のいくつかのランダムな配列。。。。」
所属していません StackOverflow