Hallo
also ich habe hier im Forum aber auch im Internet nach Fehlerbehandlung mit try-catch gesucht und ich kam zum Schluss, dass die iOS-Community eine gewisse Exceptions-Phobie hat
Ich erkläre mal was ihr vor habe und vielleicht könnt ihr mir sagen ob man die Fehlerbehandlung eleganter lösen kann.
Also ich habe Klassen:
RESTClient // Kommunikation mit dem Server
AppModel // Singleton. Verwendet RESTClient
In meinen vielen Views, die AppModel kennen, bekomme ich die Daten beispielsweise so:
Alles anzeigen
Was passiert im RESTClient?
Alles anzeigen
Ich habe das nun so gemacht wie ich es normalerweise in C# oder Android/Java mache. Ich finde das ist sehr übersichtlich und ist einfach zu verstehen.
Ich gehe immer davon aus, wenn der Benutzer was mit der App macht, dann gibt es auch Internetzugang. Falls nicht, gibt es eine Ausnahme die dann vom RESTClient zu AppModel und dann zu View geht, wo sie schliesslich behandelt wird - der Benutzer bekommt einen AlertDialog zu sehen. Alle meine Exceptions (ParseException, NoNetworkException, LoginTokenExpiredException...) erben vom AppException.
In AppException gibt es die Methode handle die UIAlertView anzeigt. Die konkreten Exception-Klassen liefern nun den gewünschten i18n-Text.
Auf diese Weise habe ich eine if-Abfrage an einer Stelle im ganzen Programm.
Ich bin aber bereit mich an Objective C anzupassen . Fall dieses Vorgehen unüblich ist, wäre ich für die Aufklärung sehr dankbar.
Grüße
EDIT: .h in Klassennamen entfernt
also ich habe hier im Forum aber auch im Internet nach Fehlerbehandlung mit try-catch gesucht und ich kam zum Schluss, dass die iOS-Community eine gewisse Exceptions-Phobie hat
Ich erkläre mal was ihr vor habe und vielleicht könnt ihr mir sagen ob man die Fehlerbehandlung eleganter lösen kann.
Also ich habe Klassen:
RESTClient // Kommunikation mit dem Server
AppModel // Singleton. Verwendet RESTClient
In meinen vielen Views, die AppModel kennen, bekomme ich die Daten beispielsweise so:
Quellcode
Was passiert im RESTClient?
Quellcode
- - (NSDictionary *)loadNewData:(NSString *)term forLanguage:(NSString *)lang{
- [self _checkConnection];
- RequestFactory * requestFactory = [RequestFactory alloc];
- NSURLRequest * request;
- NSDictionary * response;
- //... Lade Daten...
- return response;
- }
- -(NSDictionary*) loadPersonData:(NSInteger)personID {
- [self _checkConnection];
- RequestFactory * requestFactory = [RequestFactory alloc];
- NSURLRequest * request;
- NSDictionary * response;
- // Lade Daten....
- return response;
- }
- // und viele andere Methode die was vom Server laden. Alle diese Methoden prüfen zuerst ob der Nutzer online ist.
- -(void) _checkConnection{
- if(![[NetworkUtil instance] isOnline]){
- @throw [NoNetworkException exceptionWithName:@"NoNetwork" reason:@"WLAN OFF?" userInfo:nil];
- }
- }
Ich habe das nun so gemacht wie ich es normalerweise in C# oder Android/Java mache. Ich finde das ist sehr übersichtlich und ist einfach zu verstehen.
Ich gehe immer davon aus, wenn der Benutzer was mit der App macht, dann gibt es auch Internetzugang. Falls nicht, gibt es eine Ausnahme die dann vom RESTClient zu AppModel und dann zu View geht, wo sie schliesslich behandelt wird - der Benutzer bekommt einen AlertDialog zu sehen. Alle meine Exceptions (ParseException, NoNetworkException, LoginTokenExpiredException...) erben vom AppException.
In AppException gibt es die Methode handle die UIAlertView anzeigt. Die konkreten Exception-Klassen liefern nun den gewünschten i18n-Text.
Auf diese Weise habe ich eine if-Abfrage an einer Stelle im ganzen Programm.
Ich bin aber bereit mich an Objective C anzupassen . Fall dieses Vorgehen unüblich ist, wäre ich für die Aufklärung sehr dankbar.
Grüße
EDIT: .h in Klassennamen entfernt
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von dit ()