iPhone Keyboard ausblenden nach Eingabe

iPhone Tastatur

iPhone Tastatur

Wenn man im iPhone SDK ein UITextField hat, und daraf klickt, erscheint die Tastatur. Per Default verschwindet sie jedoch nicht wnen man auf Return drückt. Die folgenden Zeilen ermöglichen dieses Feature.

In der Header File (*.h file):

[…]

-(IBAction)textFieldDoneEditing:(id)sender;

[…]

In der Implementierung (*.m File):

[…]

(IBAction)textFieldDoneEditing:(id)sender{
[sender resignFirstResponder];
}

[…]

Dazu noch im Interface Builder das Eingabefeld auswählen, im Object Inspector in den Connection Tab wechseln und eine Linie von „Did End on Exit“ zu „File Owner“ ziehen und dort die oben aufgeführte Action auswählen.

objective-c warning ‘class’ may not respond to ‘method’

Der Fehler „objective-c warning ‘class’ may not respond to ‘method’“ hat seine Ursache in einem Aufruf ener Methode die möglicherweise nicht deklariert ist. Quasi Aufruf vor Deklaration.

Fehlermeldung

Fehlermeldung

Lösung: Deklaration vor Aufruf, z.B. den Funktionskopf in der zugehörigen Header-Datei einführen. Dann läuft auch die iPhone Anwendung ohne Warning.

NSMutableArray size count numberofitems

NSMutableArray count

NSMutableArray count

Da bei einem NSMutableArray keine size Operation funktioniert, aber die Anzahl der Elemente wichtig ist nutzt man die Operation count.

NSString *firstObject = @“firstObject“;
NSString *secondObject = @“secondObject“;

NSMutableArray *testArray = [[NSMutableArray alloc]init];
[testArray addObject:firstObject];
[testArray addObject:secondObject];

NSLog(@“Size des Arrays: %i“, [testArray count]);

Resultat eine Log Ausgabe:

2009-09-09 12:27:08.838 XML[56422:20b] Size des Arrays: 2

NSMutableArray LogAusgabe

NSMutableArray LogAusgabe

XCode Objc breakpoint bei exception

Thread XCode

Thread XCode

Wer mit Java gearbeitet hat, ist gewohnt, exceptions zu catchen, verarbeiten oder zu throwen. In XCode muss man sich da etwas umstellen. Exceptions werden bei Laufzeit geworfen und eine Möglichkeit, auf diese zu reagieren ist auf den ersten Blick nicht vorgesehen.

Wenn nun eine Exception bei einem Projekt mit mehreren tausend Zeilen Code auftritt bietet der Debugger nur wenig Hilfe die entsprechende Stelle zu finden. Die Konsolenausgabe hilft nur teilweise. Viel schöner wäre doch ein automatischer Breakpoint bei der fehlerhaften Stelle. Und genau dies ist Möglich!

Man öffne den Debugger, Klicke auf Breakpoints und füge dort einen eigenen Breakpoint mit dem Namen objc_exception_throw und der Location libobjc.A.dylib. Fertig!

XCode Breakpoints

XCode Breakpoints

XCode automatischer Breakpoint

XCode automatischer Breakpoint

Ab jetzt wird automatisch ein Breakpoint dort gesetzt, wo eine Exception geworfen wird.

trim NSString iPhone objective C

trimmed string obj c

trimmed string obj c

Aus anderen Programmiersprachen kennt man den trim(); Befehl, der folgendes tut:

trimEntfernt Whitespaces (oder andere Zeichen) am Anfang und Ende eines Strings

In ObjC ist eine solche trim Funktionalität z.B: sinnvoll wenn man eine XML parsen möchte und in der XML Leerzeichen vor dem eigentlichen String sind.

Folgende Anweisung entfernt die störenden Leerzeichen (whitspaces):

NSString *trimmedString = [StringWithWhitespaces stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

Resultat ist ein NSString, der ohne Probleme genutzt werden kann.

Eigenes TabBar Objekt mit ViewController

Um in eine TabBarNavigation einer iPhone Anwendung ein neues TabBarNavi-Item hinzuzufügen, welches einen eigenen Controller (UIViewController) und eine eigene View hat sind folgende Schritte notwendig:

  1. Klasse für ViewController erstellen (Bsp.: MyTabItemViewController) Typ der Klasse: UIViewController
  2. Neue View Nib / XIB File erstellen (Bsp.: MyTabItemView.xib)
  3. In MyView.xib den Typ des File Owners auf den Controller umstellen (Bsp. MyTabItemViewController)
  4. In MyView.xib eine Verbindung zwischen FileOwner und der View herstellen vom Typ view
  5. Implementierung MyTabItemViewController (siehe unten A)
  6. Implementierung in AppDelegate (siehe unten B)

A: Implementierung MyViewController:


//
//  MyTabItemViewController.m
//  TabBar
//
//  Created by Alexander Jäger on 04.09.09.
//  Copyright 2009 mediajaeger.de. All rights reserved.
//
#import "MyTabItemViewController.h"


@implementation MyTabItemViewController


// Override initWithNibName:bundle: to load the view using a nib file then perform additional customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
self.title = @"MyTabItemView";

self.tabBarItem.image = [UIImage imageNamed:@"all.png"];
}
return self;
}

- (void)dealloc {
[super dealloc];
}

@end

A: Implementierung AppDelegate:


- (void)applicationDidFinishLaunching:(UIApplication *)application {
[...]
tabBarController = [[UITabBarController alloc] init];
MyTabItemViewController *aMyTabItemViewController = [[MyTabItemViewController alloc] initWithNibName:@"MyTabItem" bundle:nil];
// other ViewController
[...]
// add the Controller to the RootController
tabBarController.viewControllers = [NSArray arrayWithObjects:firstViewController, secondViewController,aMyTabItemViewController, nil];
[...]
// release
[aMyTabItemViewController release];
[...]

tabBarController Programm stürzt mit EXC_BAD_ACCESS ab

Wer ein iPhone Programm mit einer tabBar Navigation über einen tabBarController schreibt, kann unter Umständen das Problem erhalten, dass das Programm ohne ersichtlichen Grund mit EXC_BAD_ACCESS terminiert.

Eine mögliche Ursache ist der Array aus ViewControllern, der mit Inhalten gefüllt wird:

tabBarController.viewControllers = [NSArray arrayWithObjects:firstViewController, secondViewController,thirdViewController];

Dieser Array zeigt den Fehler, denn um eine korrekte Darstellung zu erhalten, muss der Array mit nil terminiert werden:

tabBarController.viewControllers = [NSArray arrayWithObjects:firstViewController, secondViewController,thirdViewController, nil];

XCode Auto Vervollständigung Code completion

XCode Code Completion Liste

Wer mit XCode arbeitet kennt die Code Completion, beim tippen wird das wahrscheinlichste in grau angezeigt und kann mit ENTER bestätigt werden. Das erspart eine Menge Arbeit.

Was jedoch tun, wenn man nicht genau weiß, welche Methoden oder Properties ein Objekt / Instanz hat?

XCode bietet dafür eine Lösung, die von vielen anderen Frameworks bekannt ist: eine Darstellung als Liste!

Diese Liste erhällt man durch ESC beim tippen und sieht dann wie oben gezeigt aus. Nun noch das gewünschte Element der Liste auswählen, fertig.

Stanford iPhone CS193P – Cocoa Programming

iPhone Stanford in iTunes

iPhone Stanford in iTunes

Ein super Einstieg in die iPhone Programmierung ist die Stanford Vorlesung CS193P, bei der zwei Apple Mitarbeiter(Evan Doll und Alan Cannistraro) von Null beginnen und das iPhone Developement Framework erklären. Zwischen den normalen Vorlesungen sind zahlreiche Special Events wie Berichte von Startup Gründern eingeschoben.

Die Vorlesungen können über iTunesU kostenfrei geladen werden und sind perfekt aufgearbeitet.

Zur Unterstützung bekommt man unter:

CS193P – Cocoa Programming

Das komplette Kursmaterial, Präsentationen, Beispiele und Tipps.