let src = json as NSDictionarylet documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]let path = documentsURL.appendingPathComponent("one.plist")let result = src.write(to: path, atomically: false)print(result, path)

生效了,

写入失败,

为什么?


当然不是代码的问题,是数据的问题

数据长这样

json:{  "message" : "",  "code" : 200,  "state" : null,  "data" : {    "author" : "",    "next_id" : 409,    "title" : "2 金木水火土",    "prev_id" : 405,    "list" : [      {        "string" : "识字",        "type" : 0      },      {        "string" : "一: 一个 一群",        "type" : 1,        "pronounce" : "yī"      }    ],    "nodes" : {      "wav_lengths" : [        0,        4.0049999999999999,        8.2509999999999994      ],      "node" : [        {          "index" : 0,          "title" : "识字"        }      ]    },    "audio" : "http://ss-cn.aliyuncs.com/chinese_audio%2F%E9%83%A8%E7%BC%96%E7%89%88%E8%AF%AD%E6%96%87%E5%85%AD%E4%B8%89%E5%88%B6%2F%E4%B8%80%E5%B9%B4%E7%BA%A7%E4%B8%8A%E5%86%8C%2Faudio%2F%E8%AF%86%E5%AD%972.wav?OSSAccessKeyId=LTAIQ8Lif1HHVkXd&Expires=1606364958&Signature=XC%2Fm%2BLKZ30b%2FVYCsXrwCaNj6nZI%3D"  }}

数据是字典,但不合乎 plist 的标准


 {        "string" : "识字",        "type" : 0      },      {        "string" : "一: 一个 一群",        "type" : 1,        "pronounce" : "yī"      }

list 外面是数组,数组装字典,

一个字典三个键,一个字典两个键,

所以呵呵


批改代码:

 let resp = try Base.decoder.decode(GeneralSingle<P_intelligence>.self, from: data)      var newPlistModel = resp      var i = 0      let count = resp.data.list.count      while i < count{          if resp.data.list[i].pronounce == nil{               newPlistModel.data.list[i].pronounce = "hehe "          }          i += 1       }       let json = newPlistModel.data.dictionary       let src = json as NSDictionary       let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]       let path = documentsURL.appendingPathComponent("one.plist")       let result = src.write(to: path, atomically: false)       print(result, path)       

对应的模型:

struct P_intelligence: Codable {        let listen: String        let see: Node_intelligence            var list: [Moron]        let title: String            let pre: Int        let next: Int    let author: String?            private enum CodingKeys : String, CodingKey {        case listen = "audio", see = "nodes"        case list,  title, pre = "prev_id"        case next = "next_id", author    }            var dictionary: [String: Any] {            return (try? JSONSerialization.jsonObject(with: JSONEncoder().encode(self))) as? [String: Any] ?? [:]    }}struct Moron: Codable {    let string: String    let type: Int    var pronounce: String?}// ......