NSData setLength EXC_BAD_ACCESS

时间:2013-12-09 08:29:19

标签: ios nsurlconnection nsdata

我正在开发一个IOS应用程序。 setLength方法在didReceiveResponse中崩溃。你觉得是什么原因呢。我该怎么做才能防止。

enter image description here

- (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];
}

3 个答案:

答案 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];
   }
}