Hi,
das "Problem": Ich lade z.B. in einer Methode Daten. Ich setze den Networkindicator auf visible.
Nun gibt es mehrere Stellen wo abgebrochen werden muss. Wenn die geladenen Daten nil sind, wenn die deserialisierung in die Hose geht...
Jedes mal, bevor ich mit return raus gehe, muss ich dran denken, den Networkindicator wieder auszuschalten.
In einem Kurs den ich bei Java Leuten gehalten habe, wurde gefragt, warum man das nicht mit @try @finally macht. Ist wohl in Java üblich.
In ObjC nicht, jedenfalls nicht das ich wüsste. Aber dumm ist es irgendwie auch nicht. So wird nicht aus versehen vergessen den Networkindicator auszuschalten, oder was es auch immer so an abschließenden Arbeiten gibt, die man auf alle Fälle machen muss.
Alles anzeigen
Was meint ihr - oder bin ich etwa wieder der Einzige der das nicht so macht
Gruß
Manfred
das "Problem": Ich lade z.B. in einer Methode Daten. Ich setze den Networkindicator auf visible.
Nun gibt es mehrere Stellen wo abgebrochen werden muss. Wenn die geladenen Daten nil sind, wenn die deserialisierung in die Hose geht...
Jedes mal, bevor ich mit return raus gehe, muss ich dran denken, den Networkindicator wieder auszuschalten.
In einem Kurs den ich bei Java Leuten gehalten habe, wurde gefragt, warum man das nicht mit @try @finally macht. Ist wohl in Java üblich.
In ObjC nicht, jedenfalls nicht das ich wüsste. Aber dumm ist es irgendwie auch nicht. So wird nicht aus versehen vergessen den Networkindicator auszuschalten, oder was es auch immer so an abschließenden Arbeiten gibt, die man auf alle Fälle machen muss.
Quellcode
- - (void) loadData
- {
- [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible: YES];
- dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
- dispatch_async(queue, ^{
- @try
- {
- NSURL *url = [NSURL URLWithString: @"https://itunes.apple.com/lookup?id=396306964&entity=software&country=de"];
- NSData *data = [[NSData alloc] initWithContentsOfURL: url ];
- if (data == nil)
- {
- [[[NSException alloc] initWithName: @"LoadError" reason: @"DerGrund" userInfo: nil] raise]; //ARC ist manchmal komisch :-)
- }
- NSError *error = nil;
- NSDictionary *unserialize = [NSJSONSerialization JSONObjectWithData: data
- options: 0
- error: &error];
- if (error != nil)
- {
- [[[NSException alloc] initWithName: @"DesrializationError" reason: @"DerGrund" userInfo: nil] raise];
- }
- NSArray *results = [unserialize objectForKey: @"results"];
- if (results == nil)
- {
- [[[NSException alloc] initWithName: @"FormatError" reason: @"DerGrund" userInfo: nil] raise];
- }
- _data = results;
- }
- @catch (NSException *exception)
- {
- // vielleicht schauen ob es unsere ist
- NSLog(@"%@", exception);
- _data = @[]; // wenns schief geht z.B. auf alle fälle ein leeres Array
- }
- @finally
- {
- dispatch_async(dispatch_get_main_queue(), ^{
- [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible: NO];
- [[self tableView] reloadData];
- });
- }
- });
- }
Was meint ihr - oder bin ich etwa wieder der Einzige der das nicht so macht
Gruß
Manfred
Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.