writetoFile failure

18 篇文章 0 订阅

write ToFile
1、存入的是基本类型,例如:NSNumber (NSInteger, Float, Double), NSString, NSArray, NSDictionary, Bool, NSDate。。。。等
2、写入的数据不能为自定义类型或者NUll,不过自定义类型可以通过归档讲数据转化为NSDate类型

根据以上第二条,通过抓包,我们存入的数据包含,null,所以一直 存入失败,可以直接把类型转为 string,防止出错

//数组转json
    func getJSONStringFromArray(array: [[String: Any]]) -> String {
        if (!JSONSerialization.isValidJSONObject(array)) {
            it_print("无法解析出JSONString")
            return ""
        }
        if let data = try? JSONSerialization.data(withJSONObject: array, options: []) as Data {
            let JSONString = String(data:data, encoding: .utf8)
            return JSONString ?? ""
        }
        return ""
    }
//JSONString转换为数组
    func getArrayFromJSONString(jsonString:String) -> [[String: Any]] {
        if let jsonData: Data = jsonString.data(using: .utf8) {
            let array = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as? [[String : Any]]
            return array ?? [[:]]
        }
        return [[:]]
    }

因为我们存储的数据量比较大,做首页缓存,所以不使用 NSUserDefault

原因:
原理上看NSUserDefaults 其实是在操作一个 plist 文件。读取NSUserDefaults值的时候会默认在内存中缓存下来一份,所以NSUserDefaults的读取速度比较快。正常情况下,我们后面对NSUserDefaults的读取都是从内存中读取的,经测试删除.plist文件后,依然可以正常读取,基本可以证明这一点。NSUserDefaults 的存储目录是在/Library/Preferences下的一个.plist文件,该路径可通过配置实现iTunes共享文件。可被iTunes备份。

1: 即使只是修改一个 key 都会 load 整个文件,不适合存储大量数据。

2:NSUserDefaults是保存成文本格式的,容易被破解,解析效率也比较低。所以数据太大的时候,解析起来就慢了。

3:NSUserDefaults你每次同步都要全写,打开要全读。小数据连同大数据一起操作了,IO以及内存都不划算,况且还有解析、序列化的成本。大数据建议弄出去,别跟NSUserDefaults这种经常存取的弄一起。

4:要注意的是NSUserDefault存储的都是不可变(immutable)的数据,就算是将NSMutableArray存到NSUserDefault,读取出来之后还是会变成NSArray类型的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值