0

Upload fertig ist ich für Schleife mehrere Bilder auf Server mit AFMultipartFormData ein mit bin das Senden eines Bildes zu einem Zeitpunkt, zu holen:Führen Sie eine Methode, wenn AFMultipartFormData

NSString *string = [NSString stringWithFormat:@"%@/API/Upload",BaseURLString]; 
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
    [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]]; 
    [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 
    NSError *error; 
    NSString *mystring = @"noName"; 
//FOR Loop Start 
    for(NSData *eachImage in dataStringArray) { 

     NSURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:string parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 

      [formData appendPartWithFormData:eachImage name:@"myImage"]; 
      [formData appendPartWithFormData:[mystring dataUsingEncoding:NSUTF8StringEncoding] 
             name:@"FileName"]; 
     } error:&error]; 

     NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 
      if (error) { 
       NSLog(@"%@", error.localizedDescription); 
       return; 
      } 

      [uploadedImageIDs addObject:[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]]; 

     }]; 
     [task resume]; 
    }//for end 
     [self makeJSON:uploadedImageIDs]; 

Aber irgendwie nennt es makeJSON Methode vor. Da es mehrere Bilder gibt, muss ich sie aufrufen, nachdem das Hochladen für alle Bilder abgeschlossen ist.

+0

rufen Sie dies einfach im Block [self makeJSON: uploadedImageIDs]; –

Antwort

1

Die Netzwerkverarbeitung wird asynchron ausgeführt, daher müssen Sie im Netzwerk completionHanlder zählen, um zu wissen, wann alle Aufgaben abgeschlossen wurden. So

NSString *string = [NSString stringWithFormat:@"%@/API/Upload",BaseURLString]; 
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
    [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]]; 
    [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 
    NSError *error; 
    NSString *mystring = @"noName"; 
    NSInteger count = 0; 

//FOR Loop Start 
    for(NSData *eachImage in dataStringArray) { 

     NSURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:string parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 

      [formData appendPartWithFormData:eachImage name:@"myImage"]; 
      [formData appendPartWithFormData:[mystring dataUsingEncoding:NSUTF8StringEncoding] 
             name:@"FileName"]; 
     } error:&error]; 

     NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 
      count++; 

      if (error) { 
       NSLog(@"%@", error.localizedDescription); 
      } else { 
       [uploadedImageIDs addObject:[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]]; 
      } 

      if (count == dataStringArray.count) { 
       [self makeJSON:uploadedImageIDs]; 
      } 
     }]; 
     [task resume]; 
    }//for end 
Verwandte Themen