Posted by admin | Development,iPhone,Mac OS X,Objective-C,Software | Sunday 7 August 2011 14:10

Buchempfehlung mit Beitrag von mir:

Share/Save/Bookmark

frame Attribut von Objekten einfach updaten mit CGRectOffset

Posted by admin | Development,iPhone,Mac OS X,Objective-C | Tuesday 20 July 2010 21:44

Einen schnellen und Code sparenden Weg um das frame Attribut und damit die Position eines Objekt in Cocoa zu ändern bietet die CGRectOffset Funktion;

meinObjekt.frame = CGRectOffset( meinObjekt.frame, dx, dy);

verschiebt um die Werte in den float Parametern dx und dy.

Share/Save/Bookmark

Fehlermeldung beim kompilieren QTCoreVideo101

Posted by admin | Development,Mac OS X | Thursday 25 March 2010 00:42

Ich wollte gerade im XCode 3.2.1 den QTCoreVideo101 Sample Code von Apple bauen.
Es gab aber in der Datei MyOpenGLView.m in Zeile 158 den Fehler: invalid conversion from ‘long int*’ to ‘const GLint*’.
Durch das Casting läuft es dann:

[[self openGLContext] setValues:(GLint*)&swapInterval forParameter:NSOpenGLCPSwapInterval];
Share/Save/Bookmark

Base64 Kodierung/Dekodierung auf dem iPhone

Posted by admin | Development,iPhone,Mac OS X,Objective-C | Wednesday 25 November 2009 10:51

Hier gibt es eine Base64 Implementierung als Erweiterung von NSData für das iPhone.

Share/Save/Bookmark

Lokalisierung einer iPhone App

Posted by admin | Development,iPhone,Mac OS X,Objective-C | Thursday 5 November 2009 19:01

Unter der Lokalisierung einer Anwendung versteht man allgemein die Übersetzung und Anpassung der Oberfläche in eine andere Spache. Wie das in XCode für XIB Dateien und im Quellcode durchgeführt wird soll dieses kleine Beispiel zeigen.

Wir starten mit einem neuen Projekt und wählen als Vorlage das View-based Application Template. Als Name habe ich LocalizationTest gewählt.

Wir öffnen die LocalizationTestViewController.h Datei und erweitern die Interface Definition um 2 UILabels:

@interface LocalizationTestViewController : UIViewController {
	IBOutlet UILabel *label1;
	IBOutlet UILabel *label2;
}

Als nächstes öffnen wir den Interface Builder durch Doppelklick auf die LocalizationTestViewController.xib Datei und fügen dort 3 UILabel Controls hinzu. Die ersten beiden verlinken wir durch CTRL-Klick und ziehen auf das File’s Owner Objekt mit den beiden Definitionen im View Controller label1 und label2. Das dritte Label füllen wir mit statischem englischen Text.

Wir gehen zurück in XCode und öffnen das Info Fenster für LocalizationTestViewController.xib. Unten links im General Tab befindet sich der Make File Lokalizable Button. Durch Klicken des Buttons wird für die .xib Datei die englische Default Loaklisierung angelegt. Durch Klick auf den Add Lokalization Button wird eine neue Version für die angegebene Sprache erstellt. Dafür müssen die 2 Buchstaben ISO Codes verwendet werden.

Im XCode ist jetzt ein kleiner Pfeil zum Aufklappen vor der LocalizationTestViewController.xib Datei aufgetaucht. Darunter finden wir die .xib Dateien für die angelegten Sprachen. Diese können normal geöffnet und bearbeitet werden. In unserem Fall ersetzen wir den englischen Text des dritten Labels durch einen deutschen. An den ersten beiden brauchen wir keine Änderung durchführen da wir deren Inhalt dynamisch im Code ändern werden.
Damit ist der erste Teil der Lokalisierung abgeschlossen.

Als nächstes erweitern wir die viewDidLoad Methode in LocalizationTestViewController.m um folgenden Code:

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
 
    NSLocale* curentLocale = [NSLocale currentLocale];
 
    label1.text = [NSString stringWithFormat:
		NSLocalizedString(@"The current locale is: %@",
		@"String used to display the current locale."),
		[curentLocale displayNameForKey:NSLocaleIdentifier
		value:[curentLocale localeIdentifier]]];
 
    label2.text = NSLocalizedString(@"This is my default value.", @"This is a comment about my default value string.");
 
    [super viewDidLoad];
}

Die wichtigste Funktion hier ist NSLocalizedString. Der erste Parameter ist der Key für die Sprachen Dateien und fungiert auch als Default Wert. Der zweite Parameter ist ein Kommentar, der später in der generierten Sprach Datei erscheint.

Für das erste UILabel erzeugen wir einen lokalosierbaren String mit Platzhalter, an dem wir das vom Benutzer eingestellte Local mit Hilfe der NSLocale Klasse ausgeben.

Für das zweite UILabel erzeugen wir mit einem einfacheren Beispiel nur einen einfachen String zur Ausgabe.

Um jetzt die Strings im Code zu lokalisieren müssen wir XCode leider verlassen. Wir öffnen ein Terminal Fenster und springen in das Hauptverzeichnis der Anwendung. Dort führen wir das folgende Kommando aus:

genstrings Classes/*.m

Dies erzeugt uns die Datei Localizable.strings mit folgendem Inhalt:

/* String used to display the current locale. */
"The current locale is: %@" = "The current locale is: %@";
 
/* This is a comment about my default value string. */
"This is my default value." = "This is my default value.";

Diese müssen wir jetzt unserem Projekt hinzufügen. Wir klicken dafür mit der rechten Maustaste auf den Reources Ordner und wählen Add existing File und dann Localizable.strings aus. Als Text Encoding wählen wir UTF-16.

Der weitere Ablauf ist analog der Lokalisierung der .xib Datei. Wir öffnen das Info Fenster für Localizable.strings, klicken auf Make File Lokalizable, dann auf den Add Lokalization Button und fügen dann de hinzu.

Jetzt öffnen wir die deutsche Version von Localizable.strings und ändern diese entsprechend ab:

/* String used to display the current locale. */
"The current locale is: %@" = "Das aktuelle Schema ist: %@";
 
/* This is a comment about my default value string. */
"This is my default value." = "Das ist mein Default Wert.";

Damit haben wir auch die Lokalisierung des Quellcode abgeschlossen.

Das XCode Projekt findet ihr hier.

Share/Save/Bookmark

Übersicht über Breakpoints in XCode

Posted by admin | Development,iPhone,Mac OS X,Objective-C | Tuesday 27 October 2009 17:42

Eine Übersicht über alle gesetzten Breakpoints in einem XCode Projekt erhält man mit CMD + OPT + B.

Share/Save/Bookmark

Kommunikation zwischen Objekten in Cocoa

Posted by admin | Development,iPhone,Mac OS X,Objective-C | Monday 26 October 2009 22:29

Notifications bieten einen einfachen Weg zwischen Objekten zu kommunizieren wenn die Nachrichten keine Rückmeldung benötigen bzw. diese auch nicht unbedingt verarbeitet werden müssen. Zum Beispiel sendet die Music Library API ab iPhone OS 3.0 Notifications über das NSNotificationCenter über den aktuellen Playback Status.

Die Implementierung ist sehr simpel.

Zum Senden einer Nachricht:

[[NSNotificationCenter defaultCenter] postNotificationName:@"MessageName" object:self];

und zum Empfangen:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(action:) name:@"MessageName" object:sender];
Share/Save/Bookmark

#pragma mark in XCode

Posted by admin | iPhone,Mac OS X,Objective-C | Wednesday 15 July 2009 23:37

Als kleine Navigationshilfe in längeren Source Files kann man wichtige Blöcke zum einfachen wiederauffinden mit einer

#pragma mark Beschreibung

Zeile kennzeichen.

Das Ergebnis sieht dann so aus:

Picture 3

Share/Save/Bookmark