views:

38

answers:

2

I'm running the following example code from Apple -

        NSString *requestURL = [[NSString alloc] initWithString:@"http://google.com/"];         
        NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:requestURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
        NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

        if(theConnection) {

            NSLog(@"The connection has started...");

        } else {

            NSLog(@"Connection has failed...");

        }

But the delegate methods below aren't being called. Can anyone please help me out?

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
+1  A: 

If you are performing this on a background thread, the thread is probably exiting before the delegates can be called. Look at calling in your method that starts the transfer just after you call the method that fires off the background thread, CFRunLoopRun(). Then in your callbacks connectionDidFinishLoading: and connection:didFailWithError: make sure you also run:

CFRunLoopStop(CFRunLoopGetCurrent());

At the end of those methods, otherwise you will never return.

jer
A: 

Are you setting the delegate? In the class interface where that code is located, add <NSURLConnectionDelegate>

For example:

@interface myClass : parentClass<NSURLConnectionDelegate>

Good luck!

Karasutengu