文件写入到documentDirectory再重新加载不成功

导致bug的原因是,直接保存文件路径filePath到UserDefault中,再取出后,直接用let imagedata = try? Data.init(contentsOf: filePath) 失败。

正确处理如下:

————————————————————————————————

//本地存储

                    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)

                    var filePath: String?

                    var appendingPath: String?//加载图片的时候在用NSSearchPathForDirectoriesInDomains获取根目录,再appendingPathComponent上appendingPath,如果直接保存filePath,加载图片失败(路径相比较有前面多了file://,但是去掉也加载失败)

                   filePath = URL(fileURLWithPath: paths[0]).appendingPathComponent(appendingPath!).absoluteString

// 将图片文件数据写入沙盒中

                    var imageData:Data? = Data.init()

                    do {

                        try imageData = Data.init(contentsOf: URL(string: adInfo["url"]!)!)

                    }catch {

                        print("下载图片数据失败")

                    }

                    do {

                        try imageData?.write(to: URL(string: filePath!)!, options: Data.WritingOptions.atomic)

                    }catch {

                        print("写入缓存数据失败")

                    }

 

//banner页面显示

        let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)

        let appendingPath = MainTabBarController().getShowCommAdImage(type:"2")//必须重新获取重新拼接才能加载

        let bannerImagePath = URL(fileURLWithPath: paths[0]).appendingPathComponent(appendingPath)

//        print(bannerImagePath) //file:///var/mobile/Containers/Data/Application/4AE32403-817F-4813-AB19-3541628C436C/Documents/etouchSkyBannerImage2_10015,swift中的本地文件路径多了file://的前缀

        let imagedata = try? Data.init(contentsOf: bannerImagePath)

        if imagedata != nil {

            bannerView.image = UIImage.init(data: imagedata! )

        }

 

//Launch页面显示

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

    NSString *appendingPath = [tabbarVC getShowCommAdImageWithType:@"1"];

    NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", appendingPath]];///var/mobile/Containers/Data/Application/A8FB3F13-917E-4203-9CEE-7C399016C51B/Documents/etouchSkyLaunchImage7_10015

NSData *imagedata = [NSData dataWithContentsOfFile:_filePath];

    if (imagedata) {

        UIImage *image = [UIImage imageWithData:imagedata];

   }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值