> Solution 1 would be to have you do a synchronous NSURLConnection in your main 
> method.  This will show you everything is working in that thread and that you 
> do indeed get data back from your server.

This isn't a good idea since it limits the cancelabilty of your operation.

> NSRunLoop* currentRunLoop = [NSRunLoop currentRunLoop];
> if ( currentRunLoop )
> {
>       // 1. Start the URLConnection!
>       mURLConnection = [NSURLConnection connectionWithRequest:mURLRequest 
> delegate:self];
>       [mURLConnection start];
>       
>       // 2. We have a run Loop, so wait until the connection is finished
>       while ( !done && ![self isCancelled] )
>       {
>               // Run the RunLoop!
>               NSDate* dateLimit = [[NSDate date] addTimeInterval:0.1];
>               [currentRunLoop runUntilDate:dateLimit];
>       }
>       
>       // 3. Report your results to your main thread!
>       …
> }

This is polling and is generally a bad idea, also with such a low timeout your 
thread will thrash. Furthermore it ties the worker thread up until the 
operation is complete.

You should instead make a 'concurrent' NSOperation subclass as it's described 
in NSOperation parlance. What it really means is an asynchronous one.

Implement all the required 'concurrent operation' methods, and in -start you do 
as you were doing, create an NSURLConnection and schedule it in the +[NSRunLoop 
mainRunLoop]. In the completed callbacks (under error or success conditions) 
you mark the operation as isFinished.

This makes your operation cancellable, and frees the worker thread up to 
service other work units.

Keith

_______________________________________________

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