• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
NSURLConnection unhappiness
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

NSURLConnection unhappiness


  • Subject: NSURLConnection unhappiness
  • From: Nick Hristov <email@hidden>
  • Date: Wed, 29 Apr 2009 21:31:28 -0700

Hello,

I am currently working on a small iphone app, and I am facing some
difficulty with getting NSURLConnection to ... connect. Basically my unit
tests don't pass: connection is never made.

Here is a snippet of the non-working code:

<code>

- (id) initWithURL: (NSURL*) someurl
{
    self = [super init];
    if (self != nil) {
        self->url = [someurl copy];
        NSURLRequest * request = [NSURLRequest requestWithURL:self->url
cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 6.0];
        NSLog([NSString stringByAppendingStrings:@"Request: " , [request
description], nil]);
        self->finished = NO;
        self->connection = [[NSURLConnection alloc]
initWithRequest:request    delegate:self startImmediately:NO];
    }
    return self;
}

- (void) downloadData
{
    NSLog([self->connection description]);
    NSLog(@"run, b*$#4rd, run...");
    [self->connection scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
    [self->connection start];
    int timeout = 30;
    int i = 0;
    while(self->finished == NO && [self _deletegateTerminateCheck] == NO) {
        // suspend thread
        [NSThread sleepForTimeInterval: 1.0];
        i++;

        /// stupid, but effective safety measure:
        if(i >= timeout) {
            break;
        }
    }
}

- (NSData *) data {
    return self->data;
}

#pragma mark NSConnectionDelegate implementation
- (NSURLRequest *)connection:(NSURLConnection *)connection
willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse
*)response
{
    NSLog(@"Will send request");
    return request;
}


- (void)connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *)response
{
    NSLog(@"Did get response");
    NSString * encoding = [response textEncodingName];
    self->dataEncoding = [self getEncodingForEncodingName: encoding];
    self->mimeType = [response MIMEType];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData
*)receiveddata
{
    NSLog(@"Did get data");
    if([self _deletegateTerminateCheck]) {
        if(self->data != nil) {
            [self->data release];
            self->data = nil;
        }
        [self->connection cancel];
        [self->connection release];
        self->connection = nil;
        return;
    }
    if(self->data == nil) {
        self->data = [[NSMutableData alloc]init];
    }
    [self->data appendData:receiveddata];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"did finish loading page");
    self->finished = YES;
}


- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError
*)error
{
    NSLog([NSString stringByAppendingStrings:@"Connection failed with error:
" , [error description], nil]);
    self->finished = YES;
}

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
    NSLog(@"Will cache response");
    return cachedResponse;
}

- (void) dealloc {
    if(self->url !=nil) {
        [self->url release];
        self->url = nil;
    }
    if(self->connection != nil) {
        [self->connection release];
        self->connection = nil;
    }
    [super dealloc];
}
</code>

Here is the output that I get from the build:

2009-04-25 14:14:22.699 otest[6135:80f] Request: <NSURLRequest
http://arstechnica.com>
2009-04-25 14:14:22.704 otest[6135:80f] <NSURLConnection: 0x31d2a0,
http://arstechnica.com>
2009-04-25 14:14:22.705 otest[6135:80f] run, b*$#4rd, run...
2009-04-25 14:14:22.706 otest[6135:80f] hello?
2009-04-25 14:14:52.709 otest[6135:80f] Data is nil!

"Data is nil!" is dumped by the

[NSString stringByAppendingStrings: .... ] is my own extension and it works.

I also found
http://www.cocoabuilder.com/archive/message/cocoa/2009/3/31/233409 which
helped, without scheduling in the run loop things fail miserably.

Once again, this is all run inside a unit test. So I am not sure what else
may be missing from the run loop, looks like the URL connection never really
even starts the loading mechanism.

Thanks a bunch,

Nick
_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: NSURLConnection unhappiness
      • From: "Stephen J. Butler" <email@hidden>
    • Re: NSURLConnection unhappiness
      • From: Richard Frith-Macdonald <email@hidden>
    • Re: NSURLConnection unhappiness
      • From: Jeff Johnson <email@hidden>
  • Prev by Date: Animating .gif in NSImageView
  • Next by Date: Re: NSURLConnection unhappiness
  • Previous by thread: Animating .gif in NSImageView
  • Next by thread: Re: NSURLConnection unhappiness
  • Index(es):
    • Date
    • Thread