iOS11 下载之断点续传的bug的解决方法

 更新时间:2017年11月02日 16:52:31   作者:卢叁  
本篇文章主要介绍了iOS11 下载之断点续传的bug的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

iOS11发布之后,可能很多带有下载功能的APP都会躺枪(ps:埋怨苹果爸爸几秒钟)。因为原先用来做断点续传的resumeData里带上了一个新值,而这个新值的出现,会导致几次暂停操作后下载任务task读取数据不对,而且在文件还没下载完时就会调用下载完成时的代理方法,导致下载出错。下面就来说说解决的办法。

第一种方法:暂停时不调用[task cancelByProducingResumeData:^(NSData *resumeData){ }];而是调用suspend线程挂起的方法,可解决这个问题。

第二种方法:去除resumeData里的新值。

1:第一步:先把resumeData转成string。

 NSString *dataString =[[NSString alloc]initWithData:resumeData encoding:NSUTF8StringEncoding];

2:第二步:再去除里面的新值

 NSString *string =[self cleanResumeDataWithString:dataString];
-(NSString *)cleanResumeDataWithString:(NSString *)dataString {
  if([dataString containsString:@"<key>NSURLSessionResumeByteRange</key>"]) {
    NSRange rangeKey = [dataString rangeOfString:@"<key>NSURLSessionResumeByteRange</key>"];
    NSString *headStr = [dataString substringToIndex:rangeKey.location];
    NSString *backStr = [dataString substringFromIndex:rangeKey.location];
    
    NSRange rangeValue = [backStr rangeOfString:@"</string>\n\t"];
    NSString *tailStr = [backStr substringFromIndex:rangeValue.location + rangeValue.length];
    dataString = [headStr stringByAppendingString:tailStr];
    
  }
  return dataString;
}

第3步:把string转成新的resumeData。

resumeData =[string dataUsingEncoding:NSUTF8StringEncoding];

后记:第一种方法相对简单,第二种相对有难度些。小伙伴可根据情况酌情使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • iOS中多线程的经典崩溃总结大全

    iOS中多线程的经典崩溃总结大全

    这篇文章主要给大家介绍了关于iOS中多线程的一些经典崩溃的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • iOS利用Block逆向传值的方式详解

    iOS利用Block逆向传值的方式详解

    大家应该都有所了解在iOS开发中,常见的几种逆向传值方式,有代理(delegate)、通知(NSNotification),block等等,之前已经给大家介绍了通过代理实现逆向传值的方法,这篇文章来给大家介绍如何通过Block进行逆向传值,有需要的朋友们下面跟着小编一起来学习学习吧。
    2016-12-12
  • iOS数据持久化UserDefaults封装器使用详解

    iOS数据持久化UserDefaults封装器使用详解

    这篇文章主要为大家介绍了iOS数据持久化UserDefaults封装器使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • IOS开发中键盘输入屏幕上移的解决方法

    IOS开发中键盘输入屏幕上移的解决方法

    在IOS开法中经常会遇到键盘遮挡屏幕的事情,经常档住下面的按钮,下面小编给大家分享IOS开发中键盘输入屏幕上移的解决方法,感兴趣的朋友一起看看吧
    2016-10-10
  • iOS 组件化初步构思

    iOS 组件化初步构思

    这篇文章主要介绍了iOS组件化初步构思,并对iOS组件化常用方式的讨论进行了方案分析,以便帮助大家对ios组件化有一个深刻的了解
    2023-03-03
  • 设计模式中的Memento备忘录模式的在iOS App开发中的运用

    设计模式中的Memento备忘录模式的在iOS App开发中的运用

    这篇文章主要介绍了设计模式中的Memento备忘录模式的在iOS App开发中的运用,Memento着重于捕获和具体化当前对象的内部状态,需要的朋友可以参考下
    2016-03-03
  • IOS中对Url进行编码和解码示例

    IOS中对Url进行编码和解码示例

    本篇文章主要介绍了IOS中对Url进行编码和解码示例,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • 详解iOS AFNetworking取消正在进行的网络请求

    详解iOS AFNetworking取消正在进行的网络请求

    这篇文章主要介绍了详解iOS AFNetworking取消正在进行的网络请求,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • iOS开发之枚举用法小结

    iOS开发之枚举用法小结

    大家都知道枚举是C语言中的一种基本数据类型,是一个"被命名的整型常量"的集合,它不参与内存的占用和释放,我们在开发中使用枚举的目的只有一个,那就是为了增加代码的可读性。下面就来来看看在iOS中枚举的用法,有需要的朋友们可以看看。
    2016-09-09
  • 使用scrollTop()解决IOS中输入法遮挡输入框问题

    使用scrollTop()解决IOS中输入法遮挡输入框问题

    ios浏览器上输入法会弹出遮挡输入框问题,下面小编给大家分享scrollTop()解决IOS中输入法遮挡输入框问题,一起看看吧
    2017-09-09

最新评论