abwesend…

Posted by admin | Uncategorized | Wednesday 29 April 2009 10:53

Bis Sonntag werde ich auf der Tuning World Bodensee sein.

http://www.tuningworldbodensee.de/

Share/Save/Bookmark

UISwitch Control im UINavigationBar

Posted by admin | Development,iPhone,Objective-C | Tuesday 28 April 2009 00:47

In der neuen iPhone / iPod touch Anwendung “Zitate: Latein” ist in einer View ein UISwitch Objekt zum Umschalten zwischen der lateinischen und deutschen Anzeige eingebaut. Leider kann man dieses Control nicht weiter anpassen. Deshalb hier leider nur eine kurze Beschreibung wie es implementiert ist. Wenn eine UIView in einen UINavigationController zur Ansicht gepushed wird kann man zum Beispiel einen Button in dem rechten Bereich des Navigationbars anzeigen.

- (void)viewDidLoad {
    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
    initWithTitle:@"Edit"
    style:UIBarButtonItemStylePlain
    target:self
    action:@selector(editBtn)] autorelease];
}

In diesem Fall erscheint nach dem Laden der View ein Button mit dem Label “Edit” im NavigatinBar. Bei Klick wird im aufrufenden ViewController die Methode

- (void)editBtn;

aufgerufen.

Wenn man nun statt einem UIBarButtonItem ein anderes UIControl wie den UISwitch einfügen möchte muss man den UIButton mit einer Custom View initilisieren. In diesem Fall mit dem UISwitch:

UISwitch *sw = [[UISwitch alloc] init];
[sw addTarget:self action:@selector(switched) forControlEvents:UIControlEventValueChanged];
UIBarButtonItem *bi = [[UIBarButtonItem alloc] initWithCustomView: sw];
self.navigationItem.rightBarButtonItem = bi;
[sw release];
[bi release];

Wenn der UISwitch den Status wechselt wird im aufrufenden Controller die Methode

- (void)switched;

aufgerufen.

Share/Save/Bookmark

Blog Updates auf Twitter

Posted by admin | Uncategorized | Friday 24 April 2009 21:13

Der Blog schickt jetzt Informationen über neue Einträge durch dieses kleine Plugin
http://wordpress.org/extend/plugins/twitter-tools/
auf meinen neuen Twitter Account: http://twitter.com/dannytt

Share/Save/Bookmark

Memory Management mal wieder

Posted by admin | Development,iPhone,Objective-C | Friday 24 April 2009 20:34

Das iPhone führt aus Energiespargründen keinen Garbage Collector aus. Da auch ich immer wieder das Memory Management in Objective-C nachschlagen muß hier eine Zusammenfassung.

Wenn man ein Objekt erzeugt muss man dessen Speicherplatz auch wieder freigeben wenn man kein Speicherleck haben möchte. Generell kann man sagen, daß man für die Freigabe des Speichers verantwortlich ist wenn man diesen auch reserviert hat. Dies geschieht entweder über die alloc oder eine copy Methode:

MyObject *obj1 = [[MyObject alloc] init];
MyObject *obj2 = [obj1 copy];

Die Freigabe erfolgt über die in NSObject definierte Methode release:

[obj1 release];

Für die Freigabe des Speichers von Objekten die über Factory Methoden erzeugt wurden ist die Klasse verantwortlich. Solchen Objekten wurde vor der Rückgabe die autorelease Message gesendet. Zum Beispiel:

return [object autorelease];

Der im Mainthread automatisch vorhandene NSAutoreleasePool überwacht nun dieses Objekt und gibt dessen Speicher frei wenn die Programmausführung am Ende des Scope also dem Ende der Methode die das Objekt angefordert hat angekommen ist.
Wenn man nun dieses Objekt für eine spätere Bearbeitung behalten möchte muss man ihm die retain Message senden:

[object retain];

Nun gibt der NSAutoreleasePool das Objekt nicht frei. Man ist nun selber für dieses Objekt verantwortlich und muss ihm später die release Nachricht senden wenn man es nicht mehr benötigt.

Damit sind wir am Ende der kurzen Auffrischung zum Thema Memory Management mit Objective-C auf dem iPhone.

Wie man einen NSAutoreleasePool erzeugt habe ich hier bereits einmal beschrieben: http://cgstudio.de/2009/04/20/nsobject-background-thread-memory-leaks/

Share/Save/Bookmark

Zitate Latein Lite released

Posted by admin | iPhone,Software | Thursday 23 April 2009 19:56

zitatelateinlite_57Zitate: Latein Lite” enthält über 300 lateinische Zitate und Redewendungen. Bei jedem Start werden davon 15 zufällig angezeigt. In der Vollversion sind diese thematisch in Kategorien wie zum Beispiel Liebe, Geld und Recht gruppiert und man kann die Einträge einfach durchstöbern. Dabei kann zwischen einer lateinischen und deutschen Ansicht umgeschaltet werden.
In der Vollversion lassen sich Favoriten in mit einer Berührung in einer gesonderten Liste speichern. Zusätzlich gibt es dort eine Volltextsuche.

Vollversion

zll_screenshot1 zll_screenshot2
Share/Save/Bookmark

“Zitate: Latein” released

Posted by admin | iPhone,Software | Thursday 23 April 2009 16:36

zitatelatein_57“Zitate: Latein” ist eine eine iPhone / iPod touch Anwendung die über 300 lateinische Zitate und Redewendungen enthält. Thematisch in Kategorien wie zum Beispiel Liebe, Geld und Recht gruppiert kann man die Einträge durchstöbern. Dabei kann zwischen der lateinischen und deutschen Ansicht umgeschaltet werden.
Favoriten lassen sich in mit einer Berührung in einer gesonderten Liste speichern. Zusätzlich gibt es eine Volltextsuche.

zl_screenshot1 zl_screenshot1
zl_screenshot2

avail_on_app_store2

Share/Save/Bookmark

Zensurbestrebungen in Deutschland

Posted by admin | Uncategorized | Thursday 23 April 2009 00:22

Der Blog Spreeblick.com kommentiert das gestern beschlossene Gesetz zur Sperrung von Websites mit einem demonstrativen Streik:

http://www.spreeblick.com/protest-gegen-internetsperren/

Dank einem Totschlagargument regt sich leider kein breiter Widerstand gegen jedweder demokratischer Kontrolle entzogener Zensurbestrebungen.
Anstatt gegen Kriminelle vorzugehen wird das Problem nur stümperhaft verdrängt und dem Mißbrauch der “Liste” Tür und Tor geöffnet.

Share/Save/Bookmark

Erweiterung Website Chameleon-Frankfurt.de

Posted by admin | Flash,Web | Tuesday 21 April 2009 13:43

Chameleon Website Der Chameleon Club liegt im Herzen Bornheims an der Berger Straße in Frankfurt am Main.
Wir haben die bestehende Flash Webseite um einfache Administrationsmöglichkeiten erweitert. Alle Texte und Bilder können jetzt über ein Backend durch XML Dateien geändert werden. Das Neuerstellen des Flashfilms ist damit nicht mehr notwendig.


www.chameleon-frankfurt.de

Share/Save/Bookmark

iPhone Views ohne Interface Builder

Posted by admin | iPhone,Objective-C | Tuesday 21 April 2009 11:48

Die Kombination von mehreren UINavigationControllern mit UITableViewControllern in ein UITabBarController kann im Interface Builder genauso kompliziert werden wie es sich anhört. Wesentlicher einfacher geht es direkt in XCode.

Wir starten mit einem “Window-Based Application” Template. In unserem Application Delegate Objekt erweitern wir dann die applicationDidFinishLaunching Methode:

1
2
3
4
5
6
7
8
9
10
11
12
- (void)applicationDidFinishLaunching:(UIApplication *)application {
    tabBarController = [[UITabBarController alloc] init];
 
    myFirstTableViewController = [[MyFirstTableViewController alloc] init];
    myFirstNavBar = [[UINavigationController alloc] initWithRootViewController:myFirstTableViewController];
    [myFirstTableViewController release];
 
    tabBarController.viewControllers = [NSArray arrayWithObjects:myFirstNavBar, nil];
 
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];
}

Zeile 2 definiert den UITabBarController der als Main Controller fungiert.

Zeile 4 erzeugt unser erweitertes UITableViewController Objekt das am Ende den Content anzeigen wird.

Zeile 5 erzeugt den UINavigationController mit unserem TableViewController als Main View.

In Zeile 6 wird geben wir unser UITableViewController Objekt wieder frei.

Zeile 8 weisen wir unseren UINavigationViewController dem UITabBarController zur Anzeige zu und die View der TabBar als Subview dem Window Objekt in Zeile 10.

Die Variablen werden vorher in der Header Datei des Application Delegate Objekt definiert:

UIWindow *window;
UITabBarController *tabBarController;
UINavigationBar *myFirstNavBar;
MyFirstTableViewController *myFirstTableViewController;

Die Klasse MyFirstTableViewController ist hier eine Erweiterung der UITableViewController Klasse.

Share/Save/Bookmark

Initialisieren von Dateien im iPhone Documents Verzeichnis

Posted by admin | Development,iPhone,Objective-C | Monday 20 April 2009 14:52

Beim ersten Start einer Applikation auf dem iPhone bzw. iPod touch sollte man seine veränderbaren Datenfiles unter <Application_Home>/Documents initialisieren. Dieses Verzeichnis ist für solche Daten vorgesehen und wird bei jedem Sync mit iTunes gesichert. Weiterhin wird dieses Verzeichnis bei einem Update der Anwendung nicht überschrieben.

Hier ein Codeblock aus einer init Methode eines Datenmodels:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
NSString *paths = [[NSBundle mainBundle] resourcePath];
NSString *srcPath = [paths stringByAppendingPathComponent:@"my.db"];
 
NSArray *dpaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [dpaths objectAtIndex:0];
NSString *dstPath = [documentsDirectory stringByAppendingPathComponent:@"my.db"];
 
NSFileManager *fm = [NSFileManager defaultManager];
if(![fm fileExistsAtPath:dstPath]) {
	NSError *error;
	BOOL ret = [fm copyItemAtPath:srcPath toPath:dstPath error:&error];
	if(!ret) {
		NSLog([error localizedDescription]);
	}
}

In Zeile 1 und 2 erzeugen wir den Pfad auf unser Quellobjekt im ApplicationBundle, also dem Verzeichnis mit unserer App wie wir sie erzeugt haben.

In Zeile 4 – 6 lassen wir uns den Pfad auf das Documents Verzeichnis der Applikation zurückgeben und erzeugen den Zielpfad auf unser Datenbanktemplate.

Zeile 8 erzeugt ein NSFileManager Objekt mit dem Dateioperationen durchgeführt werden.

Zeile 9 überprüft ob die Zieldatei bereits existiert, wenn nicht dann wird die Quelldatei in Zeile 11 in den Zielpfad kopiert.

Share/Save/Bookmark