EXC_BAD_ACCESS NSUrlConnection - PullRequest
       18

EXC_BAD_ACCESS NSUrlConnection

1 голос
/ 31 мая 2010

Я получил EXC_BAD_ACCESS, когда выполняю последнюю строку функции (webData).

-(void)requestSoap{
NSString *requestUrl = @"http://www.website.com/webservice.php";
NSString *soapMessage = @"the soap message";
//website and soapmessage are valid in original code.

 NSError **error;
 NSURLResponse *response;

 //Convert parameter string to url
 NSURL *url = [NSURL URLWithString:requestUrl];
 NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];

 NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];

 //Create an XML message for webservice
 [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
 [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
 [theRequest setHTTPMethod:@"POST"];
 [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];

 NSData *webData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:error];
}

Я пытался ничего не выпускать, потому что я читаю в сети, что это почти всегда память.

Когда я отлаживаю код (NSZombieEnabled = YES), я получаю следующее:

[Session started at 2010-05-31 15:56:13 +0200.]
GNU gdb 6.3.50-20050815 (Apple version gdb-1461.2) (Fri Mar  5 04:43:10 UTC 2010)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".sharedlibrary apply-load-rules all
Attaching to process 19856.
test(19856) malloc: recording malloc stacks to disk using standard recorder
test(19856) malloc: enabling scribbling to detect mods to free blocks
test(19856) malloc: process 19832 no longer exists, stack logs deleted from /tmp/stack-logs.19832.test.w9Ek4L.index
test(19856) malloc: stack logs being written into /tmp/stack-logs.19856.test.URRpQF.index
Program received signal:  “EXC_BAD_ACCESS”.

У кого-нибудь есть подсказка?

1 Ответ

1 голос
/ 31 мая 2010

Ошибка определения переменной error. Вы должны использовать

NSError *error;

вместо

NSError **error; // There is a '*' too much here

Затем, когда вы передаете его sendSynchronousRequest:returningResponse:error:, вы должны передать его адрес, используя &error:

[NSURLConnection sendSynchronousRequest:theRequest
                      returningResponse:&response
                                  error:&error];
...