2016-06-14 2 views
0

Ich versuche, Ausnahme von meinem benutzerdefinierten Framework zu werfen. Es funktioniert gut, wenn es außerhalb des Blocks geworfen wird. App stürzt jedoch bei [Ausnahmeerhöhung] ab, wenn sie innerhalb von Block liegt.Benutzerdefinierte Ausnahme von Completionhandler/Block werfen stürzt die App in Ziel c

Wie ein Abschluss-Handler/Block zu schaffen, mit in Objective C. wirft

typedef void (^ServerResponse) (id responseObject, BOOL requestSuccess, NSError* error); 


- (void)getData:(NSUInteger*)id response:(ServerResponse)response 
{ 
    NSString* url = [NSString stringWithFormat:@"%@data/%@“,ServerUrl,[NSString stringWithFormat:@"%ld",(long)vid]]; 
………….. 
……… 
if(statuscode == 200 && [response objectForKey:@“something”]) 
{ 
        NSException* exception = [NSException exceptionWithName:@“Name” reason:@“Data id" userInfo:nil]; 
        [exception raise]; 

} 
} 

Antwort

2

Das Problem ist wahrscheinlich, dass Ihr Block asynchron aufgerufen wird immer. Daher haben Sie Ihren Block @try - @catch wahrscheinlich bereits zum Zeitpunkt der Ausnahmebedingung verlassen. Sie können dies bestätigen, indem Sie eine @finally-Klausel hinzufügen, die eine Nachricht protokolliert, und Sie werden wahrscheinlich feststellen, dass sie aufgerufen wird, bevor die Ausnahme ausgelöst wird. Wenn der Block jedoch synchron aufgerufen wird, wird die Ausnahme erfolgreich vom Block @catch abgefangen.


Als beiseite, wenn Sie einen Fehler in einer Routine melden, sollten Sie NSError Objekte passieren, keine Ausnahmen werfen, wie Sie vielleicht in anderen Sprachen. Ausnahmen gelten für Programmierfehler, die Sie in der Entwicklungsphase verwenden, und nicht für den Kontrollfluss für Situationen, die bei der routinemäßigen Nutzung der App auftreten können.

die Exception Programming Topics See, die sagt:

Wichtig: Sie sollten die Verwendung von Ausnahmen für die Programmierung oder unerwartete Laufzeitfehler wie Out-of-bounds Sammlung Zugang zu reservieren, versucht unveränderliche Objekte zu mutieren, ein Senden ungültige Nachricht und die Verbindung zum Fensterserver verloren. Normalerweise kümmern Sie sich mit Ausnahmen um diese Art von Fehlern, wenn eine Anwendung erstellt wird und nicht zur Laufzeit.

Verwandte Themen