iOS开发UserDefaults存数组报Attempt to insert non-property list错误解决
问题解答
报错原因
UserDefaults仅支持存储属性列表类型对象,包括字符串、数字、日期、二进制数据、数组、字典,且数组、字典的嵌套元素也必须是上述类型。UITextView是UI控件类,不属于合法的属性列表对象,直接存入数组再写入UserDefaults就会触发你遇到的非属性列表对象插入报错。
修正代码
你的思路完全正确,只需要存储UITextView承载的文本内容即可,调整后的代码如下:
var contentList: [String] = [] // 安全解包避免强制解包崩溃 if let existContent = defaults.array(forKey: "content") as? [String] { contentList = existContent } // 仅追加文本内容,不存储整个UITextView对象 if let inputText = label.text { contentList.append(inputText) } defaults.set(contentList, forKey: "content") // 可选调用,强制立即写入磁盘避免闪退时数据丢失 defaults.synchronize()
注意事项
不要持久化存储任何UI控件对象,控件仅负责界面展示,本身和视图生命周期绑定,存储没有实际价值。需要还原界面时,读取存储的字符串数组,遍历创建UITextView或者给已有控件赋值文本即可。
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

