NSArray-Überprüfung außerhalb der Grenzen
-
16-12-2019 - |
Frage
Noobie-Frage..Was ist der beste Weg, um zu überprüfen, ob der Index eines NSArray oder NSMutableArray vorhanden ist?Ich suche überall erfolglos!!
Folgendes habe ich versucht:
if (sections = [arr objectAtIndex:4])
{
/*.....*/
}
oder
sections = [arr objectAtIndex:4]
if (sections == nil)
{
/*.....*/
}
aber beide geben einen „Out of Bounds“-Fehler aus, der es mir nicht erlaubt, fortzufahren
(Antworten Sie nicht mit einem Try-Catch, denn das ist für mich keine Lösung)
Dank im Voraus
Lösung
Andere Tipps
Wenn Sie einen Integer-Index haben (z. B. i
), können Sie diesen Fehler im Allgemeinen verhindern, indem Sie die oben genannten Arrays nachprüfen, wie dieses
Denken Sie daran, dass NSArray vorhanden ist fortlaufende Reihenfolge aus 0 bis N-1 Artikel
Du versuchst es access
item
was hat Grenzwert überschritten und ein array
Ist nil
dann würde der Compiler rauswerfen bound error
.
BEARBEITEN :Die obige Antwort von @sch zeigt, wie wir überprüfen können, ob in NSArray ein erforderlicher bestellter Artikel vorhanden ist oder nicht.
Du kannst den ... benutzen MIN
Der Operator kann auf diese Weise stillschweigend scheitern [array objectAtIndex:MIN(i, array.count-1)]
, um entweder das nächste oder das letzte Objekt im Array abzurufen.Kann nützlich sein, wenn Sie beispielsweise Zeichenfolgen verketten möchten:
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);
Ergebnis:„Einige zufällige Zeichenfolgenanordnung....."