iPhone OS 3.0 API Änderungen

iPhone OS 3.0 SearchBarNach dem Upgrade auf das brandneue iPhone OS 3.0 funktioniert nicht mehr jede Applikation. Seit Mai prüft Apple bereits bestehende und neu in den App-Store eingestellte Apps auf Kompatibilität. Entwickler wie wir tappen bei der Umstellung hier und da in die kleinen aufgestellten Fallen, so auch bei der neuen Reader App:

Sortiere Listen (z.B. eine Buchliste) realisiert man für den Anwender komfortabel als TableView mit oben angesetzter Suchfunktion UISearchBar. Die Eingabe eines Buchtitels filtert die passenden Werke heraus.

Hierfür müssen in der Programmierung verschiedene Eigenschaften z.B. für die Texteingabe in der Suchleiste angepasst werden. Dies geschieht mittels Zugriff auf das UITextField innerhalb des UISearchBar Objekt.

Gehen wir von einer Suchleiste mit folgender Definition aus:
searchBar = [[UISearchBar alloc]
  initWithFrame:CGRectMake(0,44, self.view.bounds.size, 48)];

Nun kann man einfach die Eigenschaften der searchBar setzen:
searchBar.tintColor = myColor;
searchBar.delegate = self;

Auf die Eigenschaften des Text-Elements geschah der Zugriff bis iPhone OS 2.2 so:

((UITextField *)[(NSArray *)[searchBar subviews]
  objectAtIndex:0 ]).enablesReturnKeyAutomatically = NO;
((UITextField *)[(NSArray *)[searchBar subviews]
  objectAtIndex:0 ]).returnKeyType = UIReturnKeyDone;
((UITextField *)[(NSArray *)[searchBar subviews]
  objectAtIndex:0 ]).delegate = self;

Seit iPhone OS Version 3.0 hat sich eine Kleinigkeit geändert die dazu führt dass die Applikationen unter der jeweils anderen mit einer Uncaught Exception "[UISearchBarBackground setEnablesReturnKeyAutomatically:]: unrecognized selector sent to instance xxx" zur Laufzeit abstürzen.

Die Lösung ich recht einfach. Das UITextField Objekt befindet sich unterhalb der SearchBar nicht mehr am Index 0, sondern muss jetzt über die 1 angesprochen werden:
((UITextField *)[(NSArray *)[searchBar subviews]
  objectAtIndex:1 ]).enablesReturnKeyAutomatically = NO;
((UITextField *)[(NSArray *)[searchBar subviews]
  objectAtIndex:1 ]).returnKeyType = UIReturnKeyDone;
((UITextField *)[(NSArray *)[searchBar subviews]
  objectAtIndex:1 ]).delegate = self;

Vielleicht hilft es dem ein- oder anderen dieses Schlagloch einfach zu vermeiden. Hilfreich bei der Problemlösung war ein Post von Dan Grigsby .

[EMWEE.de] [del.icio.us] [Reddit] [Slashdot] [Digg] [Facebook] [Technorati] [Google] [StumbleUpon] [Windows Live] [Netscape] [Yahoo]

Jetzt einen Kommentar schreiben!

You must be logged in to post a comment.