问题
I want to do NSURLConnection
in background mode,because it response is having much data.Forums are telling to use Apple's finite length coding to use in didEnterBackground
.
but I want to avoid it.instead of it I use following code through NSOperation
with NSInvocation
as, but it is not working.connectToServer
is having NSURLConnection
operation.any help please?didReceiveData
,didReceiveResponse
delegate methods are not called?
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(connectToServer)
object:nil];
[queue addOperation:operation];
[operation release];
[queue autorelease];
-(void)connectToServer
{
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSURLConnection *theConnection = [[[NSURLConnection alloc] initWithRequest:theRequest delegate:self] autorelease];
if( theConnection )
{
webData = [[NSMutableData data] retain];
}
else
{
NSLog(@"theConnection is NULL");
}
}
回答1:
This kind of question was asked a zillion time. Delegates are not getting called because as of iOS 4 operations are started on a secondary thread. The thread probably exits before the delegates are called that's all.
Keep the connection on the main thread and handle the data in a background thread using GCD.
I'v wrote about all this stuff here : http://cocoaintheshell.com/2011/04/nsurlconnection-synchronous-asynchronous/
EDIT : Updated link.
回答2:
Apple provides QHTTPOperation
, which does just what you want, encapsulates an NSURLConnection
within an NSOperation
, for a single request. You can find it in Apple's sample code.
QHTTPOperation
is actually a subclass of QRunLoopOperation
which lets you encapsulate logic which depends on run-loop callbacks in an NSOperation.
The 3rd party ASIHTTPRequest
is a similar popular solution, AFAIK it is no longer maintained though.
回答3:
Look at the sendAsynchronousRequest:queue:completionHandler: method documented here in Apple's Documentation. It allows asynchronous requests with NSURLConnection.
Note this requires iOS5 or higher
来源:https://stackoverflow.com/questions/9223537/asynchronous-nsurlconnection-with-nsoperation