Aus der Serie „What the fuck?“

Catchable fatal error: Argument 1 passed to Mail::sendmail() must be an instance of string, string given

Immer diese widerspenstige Logik.

Zum Gewinnspiel: Entgegen unserer eigenen Wortwahl handelt es sich nicht um eine Verlosung sondern um einen Wettbewerb. Wir vergeben insgesamt 8 Promo Codes an die besten Vorschläge für ein neues Logo und/oder einen neuen Jingle. Der Gewinner erhält einen Promo Code für Surface DJ und Gebührenfalle, alle anderen 6 erhalten einen Promo Code für eine der Applikationen, wobei ein US iTunes Store Account vorhanden sein muss und wir versuchen werden, die von euch erwähnten Wünsche zu berücksichtigen. Einsendeschluss ist Donnerstag der 26.11.2009 um 23:59:59, der Rechtsweg ist ausgeschlossen

Bei Appspodcast gibt es eine Verlosung der Gebührenfalle. Wer die Anwendung noch nicht hat, einen US iTunes Account hat und unbedingt eine Lizenz gewinnen möchte, sollte auf jeden Fall teilnehmen. Bis morgen Nacht hat man die Chance auf einen Gewinn.

Vielen Dank für die Vorstellung im Podcast.

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.

Wenn man folgende Zuweisung hat:

NSString *foo = nil;
foo = @"bar";

Dann kann man sich die erste Zeile mit nil sparen, da direkt im nächsten Schritt der Speicherbereich eh überschrieben wird. Auch wenn die obere Version auf den ersten Blick sicherer aussieht, hat folgendes den gleichen Effekt:

NSString *foo = @"bar";

The Macalope Weekly: Stupidium is an infinite resource:

Please, if you come in contact with someone who’s been infected by stupidium, do not go near them. Contact professionals in the health services field so that those exposed can be isolated for the well-being of the community. Thank you.

Das ist der beste Macalope-Artikel, den ich bisher gelesen habe. Dringende Leseempfehlung.