You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:42:01