需要写个历史地址记录,用的是userDefaults存的,贴上代码:
1.png2.png
问题:测试机a里一开始userDefaults里有值,所以第二次,第N次,添加城市都是正常的,到用测试机b的时候,第一次添加城市就报错.
原因是:因为第一次存
userDefaults
里面是没有值的,所以cityListArray = userDefaults.array(forKey: "cityList") as! [String]
3.png
as!强制解包了,但是取出来的数组是空的,所以报错
那我就将数组定义成可选值: 4.png
5.png
感觉是没有问题的,只是用可选值处理了数组为空的一种情况,但实际测试时,无论是第一次还是后面几次的添加城市,都不会被
userDefaults
存下来,cityListArray一直是空的,每次都会走到if语句中,不走else,加了断点之后,感觉问题就是出在这里
6.png
cityListArray可能已经在这里被设置成nil了
将这行代码改成:cityListArray = userDefaults.array(forKey: "cityList") as? [String] ?? []
问题得到解决,后来想了下,如果我这么设置的话应该也是可以的(未测试)主要是将数组为nil的情况拿出来判断
7.png
------------------------这是分割线-----------------------
不知道UserDefaults相同的key 会不会覆盖,做了个测试:
9.jpg
同UserDefaults同key 是会覆盖的
网友评论