Tôi thấy sự cố xảy ra sau 10 hoặc 20 giây sau khi yêu cầu POST tôi thực hiện đã hoàn tất (didReceiveResponse
, didReceiveData
và connectionDidFinishLoading
tất cả trước khi xảy ra sự cố).iPhone SDK: Gửi NSData với NSMutableURLKết quả tốt nhất trong trường hợp tai nạn bí ẩn
Đây là mã tôi đang sử dụng để thực hiện yêu cầu:
NSURL* url = [[NSURL alloc] initWithString:urlString];
[urlString release];
NSData* requestData = [jsonData dataUsingEncoding:NSUTF8StringEncoding];
NSString* requestDataLengthString = [[NSString alloc] initWithFormat:@"%d", [requestData length]];
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:requestData];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:requestDataLengthString forHTTPHeaderField:@"Content-Length"];
[request setTimeoutInterval:30.0];
[url release];
[requestData release];
[requestDataLengthString release];
m_URLConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[request release];
gì rất kỳ quặc về vụ tai nạn này là thế này: nếu tôi không gọi setHTTPBody với đối tượng NSData
tôi, setValue:@"application/json"
cho Content-Type
và setValue:requestDataLengthString
cho Content-Length
, sự cố xảy ra không phải xảy ra. Tôi hoàn toàn lúng túng như những gì đang xảy ra. Theo như tôi có thể nói, sự cố liên quan trực tiếp đến việc gửi một đối tượng NSData
theo yêu cầu của tôi. Khi nó sụp đổ, các yếu tố hàng đầu trong các cuộc gọi stack cho sự sụp đổ (EXEC_BAD_ACCESS
) như sau:
objc_msgSend
CFRelease
HTTPMessage::~HTTPMessage
_CFRelease
HTTPWriteFilter::~HTTPWriteFilter
Có ai có thể nghĩ ra điều gì đó mà tôi có thể đang làm sai? Tôi hoàn toàn mất mát những gì tôi đang làm sai, cách khắc phục nó, hoặc cách làm việc xung quanh nó. Có cách nào tốt hơn để POST dữ liệu hơn là cách tôi đang làm?
Chỉ cần thử một điều gì đó: Liệu nó có bị hỏng nếu bạn xóa dòng [requestData release] không? – squelart