writeToFile: 失败

概述

调用writeToFile: 失败,code = 512

原因

  1. 写文件的路径错误,如 caches/myPic.png/
  2. 手机空间已满:压测,多次调用 writeToFile 函数,不断向沙盒写入下载的文件后,手机提示“存储空间已满”,然后代码中日志显示 writeToFile 函数写入文件失败,进而导致解压缩失败。
  3. tmp 文件夹下异常文件超过 1000 个(后文分析)
tmp 文件夹下异常文件超过 1000 个导致 writeToFile: 失败分析

调用 writeToFile:options:error: 方法时,当 options 参数为 NSDataWritingAtomic 时,表示保证文件的写入原子性,即会先在 tmp 文件夹下创建一个临时文件,直到文件内容写入成功再导入到目标文件里;如果写临时文件的过程被中断,则临时文件始终不会被删除,即使重启 App。当 tmp 文件夹中的这种临时文件超过 1000(数据来自苹果工程师回复) 个时,再次调用 writeToFile: 一定会失败。

解决方案

  1. writeToFile: 使用非原子写入
  2. 写入文件的文件名尽量保持不变:下次写入同一个文件时可以继续写入
  3. 清空 tmp 文件夹下名为 (A Document Being Saved By XXX) 的文件夹:此文件夹为原子写入时创建的临时文件夹

参考

  1. 苹果社区

你可能感兴趣的:(writeToFile: 失败)