Note that there are some explanatory texts on larger screens.

plurals
  1. PONSURLConnection and NSURLConnectionDelegate work on different thread
    primarykey
    data
    text
    <p>as descripted in the title, I did some NSURLConnection like this. But I found that the delegate method couldn't get run. Anyone knows how to deal with it ? </p> <p>edit: my delegate works on the main thread, while NSURLConnection works on an operation queue. Now the case is :NSURLConnection works fine, but delegate won't run.</p> <p>edit 2: I used the class method [NSURLConnection connectionWithRequest: delegate:]</p> <p>here is on my main queue</p> <pre><code> NSOperationQueue *queuePhoto = [[NSOperationQueue alloc] init]; NSInvocationOperation *invocationOperationPhotos = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(transferToServerAddimages:) object:arrayOfASection]; // [invocationOperationPhotos addObserver:self forKeyPath:@"isExecuting" options:0 context:invocationOperationPhotos]; // [invocationOperationPhotos addObserver:self forKeyPath:@"isCancelled" options:0 context:invocationOperationPhotos]; // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(&lt;#selector#&gt;) name:@"isExecuting" object:nil]; [invocationOperationPhotos setQueuePriority:NSOperationQueuePriorityHigh]; [queuePhoto addOperation:invocationOperationPhotos]; [mutableArrayPhotoQueue addObject:queuePhoto]; [invocationOperationPhotos release]; [queuePhoto release]; </code></pre> <p>here is my NSURLConnnection:</p> <pre><code>- (void) transferToServerAddimages:(NSArray *) arrayToAdd { NSLog(@"[NSOperationQueue currentQueue]: %@", [NSOperationQueue currentQueue]); NSString *murphoAppPrefix = [[AppDelegate sharedAppDelegate] murphoAppPrefix]; // setting up the request object now NSString *urlString = [murphoAppPrefix stringByAppendingString:@"addPhotos.php"]; NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; /* add some header info now we always need a boundary when we post a file also we need to set the content type */ // set header value , some random text that will never occur in the body NSString *boundary = @"---------------------------14737809831466499882746641449"; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; /* now lets create the body of the post */ NSMutableData *body = [NSMutableData data]; // email part [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"email\"\r\n\r\n%@", self.trip.whoCreate.email] dataUsingEncoding:NSUTF8StringEncoding]]; // password part [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"password\"\r\n\r\n%@", self.trip.whoCreate.psw] dataUsingEncoding:NSUTF8StringEncoding]]; // image part NSInteger subCount=0; for (NSDictionary *aDict in arrayToAdd) { // belonging part [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"r_whichShortTrip%d\"\r\n\r\n%@", subCount, [aDict objectForKey:@"r_whichShortTrip"]] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uniqueId%d\"\r\n\r\n%@", subCount, [aDict objectForKey:@"uniqueId"]] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"createdTime%d\"\r\n\r\n%@", subCount, [aDict objectForKey:@"createdTime"]] dataUsingEncoding:NSUTF8StringEncoding]]; UIImage *imageFile = [aDict objectForKey:@"image"]; NSData *imageData = UIImageJPEGRepresentation(imageFile, 1.0); NSString *imageName = [[URLConnect createUUID] stringByAppendingString:@".jpg"]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat: @"Content-Disposition: form-data; name=\"image%d\"; filename=%@\r\n", subCount, imageName] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[NSData dataWithData:imageData]]; [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; UIImage *thumbnail = [aDict objectForKey:@"thumbnail"]; NSData *thumbnailData = [NSData dataWithData:UIImageJPEGRepresentation(thumbnail, 1)]; NSString *thumbnailName = [[URLConnect createUUID] stringByAppendingString:@".jpg"]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat: @"Content-Disposition: form-data; name=\"thumbnail%d\"; filename=%@\r\n", subCount++, thumbnailName] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[NSData dataWithData:thumbnailData]]; [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; } [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; // setting the body of the post to the reqeust [request setHTTPBody:body]; // now lets make the connection to the web [NSURLConnection connectionWithRequest:request delegate:self]; </code></pre> <p>}</p> <p>here is my delegate:</p> <pre><code>- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { [[[AppDelegate sharedAppDelegate] mArrayOfFailedConnection] addObject:connection]; [connection cancel]; connection = nil; } - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"response: %@", response); } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"connection: %@", connection); } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload