Bevor man auf ein Array – oder eine Datenstruktur, welche ein Array abbildet – zugreift, sollte man vorher immer (wirklich grundsätzlich immer) dessen Länge überprufen. In den meisten Fällen geht man naiv davon aus, dass der Code schon irgendwie funktionieren wird und dass – gerade in Grenzfällen – immer mindestens ein Objekt im Array sein wird.
So etwas führt allerdings zu einem Absturz, wenn mal kein Objekt im Array sein sollte:
NSArray *anArray = [foo selectedObjects]; RBObject *anObj = [anArray objectAtIndex:0]; |
Daher muss man vorher überprüfen, ob das Array tatsächlich so lang ist, wie man es erwartet. Das kann man zum Beispiel machen, indem man eine Hilfsvariable einführt:
NSArray *anArray = [foo selectedObjects]; NSUInteger i = 5; if ([anArray count] <= i) { // Fehlerbehandlung return; } RBObject *anObj = [anArray objectAtIndex:i]; |
Somit kommt es selbst bei Seiteneffekten zu keinem Absturz. Natürlich sollte man sich etwas Gescheites für die Fehlerbehandlung ausdenken, gerade wenn es sich um kritischen bzw. relevanten Code handelt.
