带有URLConnection的EXC_BAD_INSTRUCTION initWithRequest

时间:2009-11-20 06:11:55

标签: iphone nsurlconnection

我有一个奇怪的错误,我似乎无法找到任何文档或帖子。当我尝试使用标准教科书方法连接到我的Web服务(更改了隐私URL)时,我在[NSURLConnection initWithRequest]上收到EXC_BAD_INSTRUCTION或EXC_BAD_ACCESS。

最奇怪的是,有时我可以毫无例外地跨过违规行,但是10次中有9次会导致此错误。有什么建议吗?

- (void)viewDidLoad {
    NSURL *url = [NSURL URLWithString:@"http://heres/where/my/webservice/url/is/"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:30.0];

    // cancel any old connection
    if(connection) {
        [connection cancel];
        [connection release];
    }

    // create new connection and begin loading data
    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    if(connection) {
        // if the connection was created correctly, release old data (if any), and alloc new
        [data release];
        data = [[NSMutableData data] retain];
    }

    [url release];
    [request release];
}

非常感谢任何帮助或建议或RTFM!

2 个答案:

答案 0 :(得分:1)

您正在发布自动释放的对象:

NSURL *url = [NSURL URLWithString:@"…"];
NSURLRequest *request = [NSURLRequest requestWithURL:url …];
// …
[url release];
[request release];

我认为Clang应该能够捕获这些,请参阅Build→Build and Analyze(Cmd-Shift-A)。 Clang是你的朋友,习惯它。

答案 1 :(得分:0)

EXC_BAD_ACCESS表示您正在尝试释放已经释放的对象。正如zoul所说,您使用的url和request方法是自动释放方法,因此您不应在代码末尾手动释放它们。

你应该做的就是接受他的回答......因为他是对的。