2012-04-08 11 views
1

Ich arbeite an einer iOS-App und habe einige Probleme mit einer HTTP-Anfrage mit AFNetworking.AFNetworking EXC_BAD_ACCESS in setCompletionBlock

Wenn ich den Code ausführen, erhalte ich den Fehler: EXC_BAD_ACCESS (Code = 2 Adresse = 0x0). Der Fehler tritt auf, wenn ich versuche, CompletionBlock zu setzen.

Ich bin neu in Objective-C und das hat mich ratlos.

Vielen Dank im Voraus. Jedermanns Hilfe wird geschätzt!

#import "AFNetworking.h" 
#import <Cordova/CDV.h> 
#import "UploadImg.h" 

@implementation UploadImg 

- (void) uploadImg:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options{ 
    NSURL *url = [NSURL URLWithString:@"http://test.com/mobile/"]; 
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 

    NSData *imageData = [NSData dataFromBase64String:[arguments objectAtIndex:1]]; 

    NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; 
    [params setObject:@"TEST_STYLE" forKey:@"styleType"]; 

    NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/upload.php" parameters:params constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) { 
     [formData appendPartWithFileData:imageData name:@"imageName" fileName:@"image.png" mimeType:@"image/png"]; 
    }]; 

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request]; 

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"success"); 
    } 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"error"); 
    }]; 

    [operation start]; 
} 

@end 

enter image description here

Nochmals vielen Dank!

Antwort

1

Willkommen in der lustigen Welt von Objective-C, @kev_addict!

Wenn Sie eine EXC_BAD_ACCESS Ausnahme erhalten, hilft es, die Details zu haben, um zu sehen, wie die Stack-Ablaufverfolgung für den störenden Anruf aussieht.

Ohne weitere Informationen sagt mir mein Bauchgefühl, dass Ihre Probleme irgendwo in der Art und Weise liegen, wie Sie die Bilddaten von einem Array bekommen. Gibt es einen Grund, warum Sie diese Methode kein UIImage Argument haben? Es ist merkwürdig zu erwarten, dass diese Methode ein Array benötigt, das Bilddaten erwartet - in der zweiten Position, nicht weniger.

+0

Hallo Mattt, vielen Dank für die Beantwortung. Ich habe einen Screenshot hinzugefügt, bitte lassen Sie mich wissen, wenn ich an der falschen Stelle nach dem Stack-Trace suche. Dies ist der native Teil eines Plugins, an dem ich gerade arbeite, für eine phonegap/cordova App. So wird es von einer Javascript-Datei aufgerufen und ich gebe ein base64-codiertes PNG als zweites Argument ein. Danke, dass Sie sich die Zeit genommen haben, um zu helfen! – kevinstueber

+1

Aus Neugierde habe ich die Base64-Bildzeichenfolge fest programmiert, anstatt sie aus den Methodenargumenten zu bekommen, und habe den gleichen Fehler bekommen. Wenn ich den Abschnitt 'operation setCompletionBlock ... 'auskommentiere, tritt der Fehler nicht auf ... – kevinstueber