“-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data” not called

六眼飞鱼酱① 提交于 2019-12-01 01:18:47

I suspect you are having a memory management issue. I could be mistaken on this, but I believe that even:

NSURLConnection* connection=[[NSURLConnection alloc] initWithRequest:request delegate:self];

won't work, because connection will be released at the end of the containing method, when connection goes out of scope. Make sure NSURLConnection *connection and NSMutableData *data are declared as member variables where ever you are doing this, and that you alloc and init them appropriately. My code usually looks like:

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

Also, release the connection and data in dealloc. For good measure, release and set them to nil at the very end of didFailWithError and didFinishLoading:

[connection release];
connection = nil;
[data release];
data = nil;

Good luck; I've done this a million times, let me know if you cannot get it working.

James Raybould

You don't happen to be calling the NSConnection in a thread do you? If you are then what's happening is that the thread is terminating before NSConnection and its delegates have finished so it'll just bomb out without an error.

A workaround for this is in this thread

You're not getting any error messages in didFailWithError either? Kind of a silly suggestion, but are you sure you're setting the proper NSURLConnection delegate?

NSURLConnection* connection=[[NSURLConnection alloc] initWithRequest:request delegate:self];

Sometimes it's something small like that.

Another idea is to drop in a toolkit like ASIHTTPRequest and see if it works going through them.

There also could be problems, if are trying to start NSURLConnection from another Thread. Please call method [connection start] on main thread, if you have not customized Run Loop for it.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!