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

后端 未结 4 1351
清歌不尽
清歌不尽 2021-01-07 01:32

Have a look to this code snippet:-

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{               
    [webData         


        
相关标签:
4条回答
  • 2021-01-07 01:43

    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.

    0 讨论(0)
  • 2021-01-07 01:53

    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

    0 讨论(0)
  • 2021-01-07 01:59

    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.

    0 讨论(0)
  • 2021-01-07 02:07

    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.

    0 讨论(0)
提交回复
热议问题