UUID unter iOS erstellen

Auf ManiacDev.com wurde es gerade nochmals gepostet: Apple weist Apps die auf die Hardware ID zur Identifzierung setzen zurück. Als Alternative bietet sich die Verwendung von UUIDs auf iOS an, wie im Artikel How to Replace the UDID Ole Begemann beschrieben.

Hier noch eine Änderung, für die die bereits ARC in ihren Projekten verwenden. Der Rückgabewert von CFUUIDCreateString darf nicht nur als NSString gecastet werden, sondern muss zusätzlich als __bridge gekennzeichnet werden.

Non-ARC Version

uuidString = (NSString *)CFUUIDCreateString(NULL, uuid);
...
return [uuidString autorelease];

ARC Version

uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
...
return uuidString;

Core Animation lernen

  • Core Animation wird auf den Layer der UIView angewendet
  • Durch die statischen Methoden [UIView beginAnimation…] wird das Aktualisieren der View eingefroren, sozusagen ein Wiederherstellungspunkt angelegt.
  • UIViews können nur CABasicAnimations verwenden.
  • Durch die statische Methode [UIView commit] wird das Änderungslock aufgehoben, die in der Animationsdefinition festgelegten Werte kommen nun zur Anwendung. Es wird immer der Layer-Teil der View animiert.
  • Die CAAnimation als auch die CAKeyFrameAnimation wird direkt dem Layer zugeordnet.
  • Anstelle von Views können für grafische UIs auch Layern verwendet werden. Diese können aber kein Touch-Handling. Dafür wird ein HitTest ausgeführt.

Verwenden von NSUserDefaults

Ich bin aktuell dabei (ein Neujahrsprojekt) ein iOS Projekt zu vollenden. Es ist nur ein kleines Helferlein, das mir von einem beliebigen Datum die Kalenderwoche anzeigen soll.
Wenn das Programm nun beendet oder unterbrochen wird stellt sich mir die Frage, wie soll ich bestimmen, ob das Programm neu gestartet wurde oder nur aus dem Backgroundmode zurück kommt? Und der Anwender soll bestimmen können, wie das Verhalten für ihn am Besten anzuwenden ist. Hier kommt nun die Singleton-Klasse NSUserDefaults ins Spiel.
Das Verwenden der Klasse ist recht einfach. Was ich für mich klären wollte

  • Wie kann ich Factory Settings definieren?
  • Wie werden Factory Settings angewendet?
  • Wann ist der optimale Zeitpunkt zum Speichern der geänderten Settings?

Laut Doku wird dafür registerDefaults verwendet. Bedingung ist, es müssen Objekte in einem NSArray gespeichert werden. Wie geht das? Mit der Klasse NSNumber. Mit dieser Klasse kann ich nun meine BOOL Werte mit [NSNumber numberWithBool:YES] als Einstellung speichern. Das Abfragen der Werte erfolgt dann wieder über das NSNumber-Objekt mit [[NSUserDefaults standardDefaults] boolForKey:@"keyName". Die Werte aus dem registerDefaults werden dann verwendet, wenn es keinen Benutzersetting gibt.