как описано в названии, я сделал некоторое NSURLConnection, как это. Но я обнаружил, что метод делегата не может быть запущен. Кто-нибудь знает, как с этим бороться?NSURLConnection и NSURLConnectionDelegate работают над разными потоками
Редактировать: Мой делегат работает над основным потоком, а NSURLConnection работает в очереди операций. Теперь дело в следующем: NSURLConnection работает нормально, но делегат не будет работать.
редактировать 2: Я использовал метод класса [NSURLConnection connectionWithRequest: делегат:]
здесь находится на моей основной очереди
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(<#selector#>) name:@"isExecuting" object:nil];
[invocationOperationPhotos setQueuePriority:NSOperationQueuePriorityHigh];
[queuePhoto addOperation:invocationOperationPhotos];
[mutableArrayPhotoQueue addObject:queuePhoto];
[invocationOperationPhotos release];
[queuePhoto release];
вот мой NSURLConnnection:
- (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];
}
вот мой делегат:
- (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);
}
Пожалуйста, введите код –
Если в вашем потоке нет цикла запуска, NSURLConnection не будет работать. –
У вас добавлена эта линия [connection startConnection]; – sample