iOS关于多张图片上传、地址返回顺序问题及解决方案

 更新时间:2018年07月30日 16:44:55   作者:游星啊  
这篇文章主要介绍了iOS关于多张图片上传、地址返回顺序问题,文章给大家带来了三种解决方案,通过实例文字说明相结合的形式给大家介绍的非常详细,需要的朋友可以参考下

先看描述

需求是怎样的:for 循环里面、多个网络请求上传图片,每次上传一张,至于为什么每次只上传一张呢,因为上传一张将要返回图片存储服务器的地址,然后再把地址作为请求参数,请求自己服务器的 API。

过程可以说曲折,不过也有收获

解决方案一:

递归调用上传图片的函数、第一张请求成功后,然后第二张,依次进行。当然效率肯定不高,即使上传图片的AFN方法做了多线程处理。中间上传失败了,还继续上传吗?需求决定。所有放弃

解决方案二:

使用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(@"队列组:前面的耗时操作都完成了,回到主线程进行相关操作");
  });

我只能说想法很完美啊,网上也不只提出这种方案,但是我的实践过程是有问题了。网络请求延迟,队列组不可控。所以放弃

方案三:利用数组的有序性:

怎么个利用法?请看:

创建一个模型、两个属性第一个你要上传的数据信息如: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关于多张图片上传、地址返回顺序问题及解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 详解iOS中跨页面状态同步方案比较

    详解iOS中跨页面状态同步方案比较

    这篇文章主要介绍了详解iOS中跨页面状态同步方案比较,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • C++ 中exit(),_exit(),return,abort()函数的区别

    C++ 中exit(),_exit(),return,abort()函数的区别

    这篇文章主要介绍了C++ 中exit(),_exit(),return,abort()函数的区别的相关资料,需要的朋友可以参考下
    2016-12-12
  • IOS生成与读取二维码名片

    IOS生成与读取二维码名片

    这篇文章主要为大家介绍了IOS生成与读取二维码名片的方法,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • IOS开发过程中的消息通知--小红点

    IOS开发过程中的消息通知--小红点

    本文主要介绍了IOS开发过程中的消息通知--小红点的相关知识。大致分为两种方法:系统方法和自定义方法。下面跟着小编一起来看下吧
    2017-04-04
  • iOS 二维码扫描相关功能实现

    iOS 二维码扫描相关功能实现

    这篇文章主要介绍了iOS 二维码扫描相关功能实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Xcode 升级导致插件失效的解决办法

    Xcode 升级导致插件失效的解决办法

    这篇文章主要介绍了Xcode 升级导致插件失效的解决办法的相关资料,需要的朋友可以参考下
    2016-10-10
  • 关于iOS 11下app图标变空白问题的解决方法

    关于iOS 11下app图标变空白问题的解决方法

    升级到iOS11系统下自己的项目桌面app图标不见了,通过查找相关的资料终于找到了解决方法,下面这篇文章主要给大家介绍了关于iOS 11下app图标变空白问题的解决方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-12-12
  • IOS 开发之应用唤起实现原理详解

    IOS 开发之应用唤起实现原理详解

    这篇文章主要介绍了IOS 开发之应用唤起实现原理详解的相关资料,需要的朋友可以参考下
    2016-12-12
  • iOS中的UITextView文字输入光标使用技巧小结

    iOS中的UITextView文字输入光标使用技巧小结

    UITextView在用户体验方面有着十分明显的作用,包括键盘的呼出及文字的选择等,接下来就来整理给出一份iOS中的UITextView文字输入光标使用技巧小结,需要的朋友可以参考下
    2016-05-05
  • 开发绘图、手势综合App注意点

    开发绘图、手势综合App注意点

    本篇文章主要给大家详细讲述了在IOS开发绘图、手势综合App容易遇到的坑以及注意事项等内容,有兴趣的朋友参考下吧。
    2018-02-02

最新评论