2010-05-31 5 views
1

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

-(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

"NSError ** ошибка" кажется как будто есть слишком много. Также при передаче ошибки на «отправить синхронный» pas это как & ошибка для хранения адреса ошибки. – RickiG

+0

Используя серию точек останова, вы можете точно определить, какая строка вызывает EXEC_. –

+0

> он «ошибка NSError **» выглядит так, как будто есть слишком много. Кроме того, при передаче ошибки на «отправить синхронный» pas это как «ошибка», чтобы сохранить адрес ошибки. Просто отличный RickiG, я просто не видел его. Какой блупер. Спасибо большое! – Lars

ответ

1

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

NSError *error; 

вместо

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

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

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