我正在开发一个IOS应用程序。 setLength方法在didReceiveResponse中崩溃。你觉得是什么原因呢。我该怎么做才能防止。
- (void) callService:(NSString*)urlString
{
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL urlString]];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody:[urlString dataUsingEncoding:NSUTF8StringEncoding]];
theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if(theConnection) {
self.webData = [[NSMutableData data] retain];
}
else {
NSLog(@"connection is NULL");
}
}
#pragma mark Web service
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[self.webData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.webData appendData:data];
}
答案 0 :(得分:0)
通常,NSData
用法崩溃实际上是早期发布的问题。使用[NS(Mutable)Data data]
初始化的NSData是一个可自动释放的对象,即使您在其上调用了retain
。
为确保在调用didReceiveResponse
之前不会释放此对象,请使用[[NSMutableData alloc] init]
对其进行初始化。应该这样做
答案 1 :(得分:0)
看起来你的内存管理错误。
在这种情况下,它可能是一个过度发布的NSMutableData
。应该通过属性webData
对此对象进行适当的管理。你没有发布声明,但它应该是这样的:
@property (retain) NSMutableData *webData;
如果您合成了访问者,他们应该为您保留/释放。
要回答错误发生的原因,我们需要更多代码。
答案 2 :(得分:-1)
试试这个,它可能对你有帮助:
由于NULL响应数据可能会崩溃,因此请检查您的响应数据并为将来的目的设置以下条件:
并合成你的NSData:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
if(responseData != NULL)
{
[responseData setLength:0];
}
}