On Thu, Feb 21, 2008 at 9:23 PM, Doug Penny <[EMAIL PROTECTED]> wrote:
> I am trying to use NSURLConnection to fetch a few small images (like
>  10k) from various websites.  The connections are established and then
>  the connection:willSendRequest:redirectResponse: delegate method is
>  called and it freezes.  It never times out that I know of, at least
>  the connection:didFailWithError: delegate is never called.  So now for
>  the crazy part... sometimes the code works fine and all of the images
>  are retrieved.  I have tested this with several different sites and it
>  seems to be fairly random.  I have tried different caching policies as
>  well with no change.  If it fails, it always seems to fail after the
>  redirect is received.  I am running this on Leopard with GC enabled.
>  Below is the code I am using, I removed all the log messages I was
>  using for debugging.  If anyone has any ideas they would be greatly
>  appreciated.
>
>
>  NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL
>  URLWithString:imageURL]
>
>  cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
>
>  timeoutInterval:30.0];
>
>  NSURLConnection *imageConnection = [[NSURLConnection alloc]
>  initWithRequest:request
>
>                                      delegate:self];
>
>  if (!imageConnection) {
>     NSLog(@"A problem was encountered while trying to download an
>  image from %@", imageURL);
>  }
>
>
>  ----------------delegate methods-----------------
>
>  - (void)connection:(NSURLConnection *)connection
>  didReceiveResponse:(NSURLResponse *)response
>  {
>     [receivedData setLength:0];
>  }
>
>  - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData 
> *)data
>  {
>     [receivedData appendData:data];
>  }
>
>  - (NSURLRequest *)connection:(NSURLConnection *)connection
>                      willSendRequest:(NSURLRequest *)request
>                     redirectResponse:(NSURLResponse *)redirectResponse
>  {
>     return request;
>  }
>
>  - (void)connection:(NSURLConnection *)connection
>  didFailWithError:(NSError *)error
>  {
>     NSLog(@"Error: %@", [error localizedDescription]);
>  }
>
>  - (void)connectionDidFinishLoading:(NSURLConnection *)connection
>  {
>     image = [[NSImage alloc] initWithData:receivedData];
>     if (!image || ![image isValid]) {
>         image = [NSImage imageNamed:@"missingImage.tiff"];
>     }
>  }
>
>
>
>  -Doug
>

Turns out garbage collection was doing me in.  When the
NSURLConnection object was hanging out waiting for a response, it
would get collected.  To work around this, after creating the
NSURLConnection object I just stick it in a NSMutableSet.  When the
delegate gets the -connectionDidFinishLoading: message I remove the
connection object from the set.  Works great now.

Doug
_______________________________________________

Cocoa-dev mailing list ([email protected])

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to