iOS 여러 장의 사진 업로드,주소 반환 순서 문제 및 해결 방안

설명 을 먼저 보다
필요 한 것 은 무엇 입 니까?for 순환 안,여러 네트워크 에서 사진 을 올 려 달라 고 요청 합 니 다.매번 한 장 씩 올 리 는 이 유 는 한 장 씩 올 리 면 이미지 저장 서버 의 주 소 를 되 돌려 주 고 주 소 를 요청 매개 변수 로 하여 자신의 서비스 기 API 를 요청 하기 때 문 입 니 다.
과정 은 우여곡절 이 라 고 할 수 있 지만,수확 도 있다.
해결 방안 1:
그림 을 올 리 는 함수,첫 번 째 요청 이 성공 한 후 두 번 째 장 을 재 귀적 으로 호출 하여 순서대로 진행 합 니 다.물론 효율 이 높 지 않 을 것 이다.사진 을 올 리 는 AFN 방법 이 다 중 스 레 드 처 리 를 했 더 라 도.중간 에 올 리 는 데 실 패 했 는데 계속 올 리 나 요?수요 결정.모든 포기
해결 방안 2:
GCD 대기 열 그룹 사용 하기:여기에 바로 코드 를 붙 입 니 다:

dispatch_group_t group = dispatch_group_create();
  for(..){
    dispatch_group_async(group,dispatch_get_global_queue(0, 0), ^{
    NSLog(@"   :         !");
    });
   }
  dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    NSLog(@"   :           ,           ");
  });
나 는 생각 이 완벽 하 다 고 말 할 수 밖 에 없다.인터넷 에서 도 이런 방안 만 제시 하 는 것 은 아니 지만 나의 실천 과정 에 문제 가 있다.네트워크 요청 이 지연 되 어 대기 열 그룹 을 제어 할 수 없습니다.그래서 포기.
방안 3:배열 의 질서 성 을 이용 합 니 다.
어떻게 이용 합 니까?보 세 요:
모델 을 만 들 고 두 속성 을 만 듭 니 다.첫 번 째 로 업로드 할 데이터 정 보 는 image 나 data 입 니 다.업로드 함수 에 필요 한 매개 변수 에 따라 정 합 니 다.두 번 째 속성:NSString URL 서버 에서 돌아 온 그림 주소:
업로드 할 그림 배열 을 모델 배열 로 패키지 합 니 다.배열 은 질서 가 있 습 니 다.이것 이 중점 입 니 다.for 순환 모델 은 매개 변수 로 그림 업로드 함 수 를 호출 하여 성공 을 요청 한 후 모델 의 값 을 업데이트 합 니 다.
모든 그림 업로드 완료 판단 후 모델 배열 에서'그림 url'을 찾 아 서버 api 를 요청 합 니 다.
자,잘 알 겠 지.잘 모 르 겠 습 니 다.건어물 을 더 올 리 세 요.
model:

//         、     for        、            
#import 
@interface FMUploadModel : NSObject
//             
@property (nonatomic,strong) NSArray * dataArray;
@property (nonatomic,copy) NSString *imgUrl;
@end
function
//                
      dispatch_queue_t queue = dispatch_queue_create("upimgs", DISPATCH_QUEUE_CONCURRENT);
      dispatch_async(queue, ^{
        //         
        __weak typeof(self) weakself = self;
        __block int finishNum = 0;
        for (int i = 0 ; i < self.selectImgs.count; i++) {
          YRFormData *getData = [[YRFormData alloc] init];
          getData.data = UIImagePNGRepresentation(self.selectImgs[i]);
          getData.name = @"uzee_image";
          getData.filename = @"head.png";
          getData.mimeType = @"image/png";
          NSArray *array = @[getData];
          //***********//
          FMUploadModel *model = [FMUploadModel new];
          model.dataArray = array;
          model.imgUrl = @"";
          [models addObject:model];
          /*******         ,          **********/
          [YRHttpTool postWithURLNoAES:@"*****" params:@{} formDataArray:model.dataArray success:^(id json) {
            finishNum ++ ;
            model.imgUrl = json[@"response"][@"cloud"];
            if (finishNum == self.selectImgs.count) {
              dispatch_async(dispatch_get_main_queue(), ^{
                //        UI  
                [MBProgressHUD hideHUDForView:weakself.view];
                updateImage();
              });
            }
          } failure:^(NSError *error) {
            dispatch_async(dispatch_get_main_queue(), ^{
              //        UI  
              [MBProgressHUD hideHUDForView:weakself.view];
              [MBProgressHUD showError:@"      ,     " toView:self.view];
            });
          } progress:^(NSProgress *progress) {
            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
              float value = 1.0 *progress.completedUnitCount / progress.totalUnitCount;
              [MBProgressHUD showDownload:@"   ..." toView:weakself.view progress:value];
            }];
          }];
        }
      });
총결산
위 에서 말 한 것 은 편집장 이 소개 한 iOS 가 여러 장의 사진 업로드,주소 반환 순서 문제 와 해결 방안 에 대해 여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기