как вызвать mutiple webservice в xcode - PullRequest
       1

как вызвать mutiple webservice в xcode

0 голосов
/ 08 сентября 2011

Я хочу скачать, скажем, 10 разных видео с URL-адреса по другому пути, скажем, мой URL-адрес http://someurl/document/path1.mp4 до path10.mp4. Я хочу сделать это с помощью метода HTTP-подключения, возможно ли это и как .Если я это делаю, мне нужно создать соединение1, соединение 2 ....... соединение10, чтобы отслеживать, на какие данные (соединения) я получаю ответ в методе соединения ConnectionDidreceive.

По сути, все, что нужно, это загрузить видео полностью, то есть я не хочу делать, например, загружать 1-е видео, затем второе, а затем третье, но я хочу начать скачивать все видео одновременно, возможно ли это и как?

Ответы [ 4 ]

1 голос
/ 08 сентября 2011

Это, конечно, возможно.

Если вы ищете хороший способ управлять этими многочисленными запросами, а не просто запустить и позволить им быть;Я считаю, эта ветка может пролить свет на эту проблему.Похоже, что некоторые рекомендации по управлению несколькими запросами могут оказаться полезными.

1 голос
/ 08 сентября 2011

Вы можете использовать NSOperationQueue для одновременной загрузки.http://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/ или посмотрите ASIHTTPRequest http://allseeing -i.com / ASIHTTPRequest / Как использовать Найдите пример ASINetworkQueue: https://gist.github.com/150447

0 голосов
/ 10 июля 2014
-(void)getMeetings
{
    NSString *requestURL = [NSString stringWithFormat:@"%@",@"someurl"];
    [self webserviceCreate:nil urlOfwebservice:[NSURL URLWithString:requestURL] tag:1];
}

-(void)webserviceCreatePost:(NSDictionary *)dict urlOfwebservice:(NSURL *)url tag:(int)tag
{
    NSError *error = nil;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict
                                                       options:NSJSONWritingPrettyPrinted
                                                         error:&error];

    NSString *requestJson = @"";
    if (!jsonData) {
        //Deal with error
    } else {
        requestJson = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    }

    NSLog(@"jsonRequest is %@", requestJson);

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    connectionToInfoMapping = CFDictionaryCreateMutable(kCFAllocatorDefault,0,&kCFTypeDictionaryKeyCallBacks,&kCFTypeDictionaryValueCallBacks);

    NSData *requestData = [requestJson dataUsingEncoding:NSUTF8StringEncoding];

    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:[[NSUserDefaults standardUserDefaults]valueForKey:@"SessionKey"] forHTTPHeaderField:@"Authorization"];
    [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody: requestData];

    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
    CFDictionaryAddValue(connectionToInfoMapping,(__bridge const void *)(connection),
                         (__bridge const void *)([NSMutableDictionary
                                                  dictionaryWithObjectsAndKeys:[NSMutableData data],@"receivedData",[NSString stringWithFormat:@"%d",tag],@"tag", nil]));
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    //    [receivedData setLength:0];
    NSMutableDictionary *connectionInfo = CFDictionaryGetValue(connectionToInfoMapping, (__bridge const void *)(connection));
    receivedData = [connectionInfo objectForKey:@"receivedData"];
    [receivedData setLength:0];

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSMutableDictionary *connectionInfo = CFDictionaryGetValue(connectionToInfoMapping, (__bridge const void *)(connection));
    [[connectionInfo objectForKey:@"receivedData"] appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    [HUD hide:YES];
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:[error localizedDescription] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSMutableDictionary *connectionInfo = CFDictionaryGetValue(connectionToInfoMapping, (__bridge const void *)(connection));

    int tag = [[connectionInfo valueForKey:@"tag"] intValue];

    if (tag == 1)
    {
      NSArray *arrMeeting = [NSJSONSerialization JSONObjectWithData:[connectionInfo valueForKey:@"receivedData"] options:0 error:nil];
}
}
0 голосов
/ 08 сентября 2011
  1. Если у вас есть URL файла, возможно, вам не понадобится метод post.Эти методы специально используются, когда вы отправляете какой-либо параметр на сервер.

  2. Хорошо ConnectiondidReceiveResponse отправляет объект соединения в аргументах, чей ответ получен.

  3. Лучше всего было бы написать класс, который будет иметь один объект соединенияи инициализировать 10 такой класс с другим URL-адресом и конкретным параметром файла (например, местоположение сохранения и т. д.).Тогда этот класс будет обрабатывать все сложности загрузки.и в конце завершения он может уведомить класс вызывающей стороны с именем файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...