NSUserDefaults插入报错attempt to insert non-property list object

在使用NSUserDefaults的时候插入数据有时候会报以下错误:

*** Terminating app due to uncaught exception ‘NSInvalidArgumentException‘, reason: ‘*** -[NSUserDefaults setObject:forKey:]: attempt to insert non-property list object {
    array =     (
                {
            481 =             {
                msg =                 {
                    1413462307 = "[3197]\U4e8c\U5341\U516b\U56de\U590d\U4e86\U4f60\Uff1a\U4f60\U6211";
                };
                "new_msg" = 1;
                "usr_id" = 2;
                "usr_name" = "<null>";
                "usr_tx" = "<null>";
            };
        }
    );
} for key newMsgArrayDict‘

这种错误的原因是插入了不识别的数据类型,NSUserDefaults支持的数据类型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系统定义的数据类型。

自定义的类型需要转成NSData再存入。

===============================================

我原来认为NSUserDefaults存不了数组,又换成了字典,但是还是报错,最后求助网友大神解决了,是我里边的数据结构有"<null>",而NSUserDefaults是不能被成功解析并存入的,所有在存入之前需要将里边的"<null>"改成""即可。

时间: 2024-08-03 13:12:20

NSUserDefaults插入报错attempt to insert non-property list object的相关文章

mysql插入报错:java.sql.SQLException: Incorrect string value: &#39;\xE6\x9D\xAD\xE5\xB7\x9E...&#39; for column &#39;address&#39; at row 1

界面报错: 日志报错: java.sql.SQLException: Incorrect string value: '\xE6\x9D\xAD\xE5\xB7\x9E...' for column 'address' at row 1 at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.17.jar:8.0.17] at com.mys

数据插入报错Incorrect integer value: &#39;&#39; for column

鄙人不才,在操作数据库存储的时候碰见这样的问题.执行sql语句批量插入数据的时候报错 ? Incorrect integer value: '' for column 'zhuticengshu' at row 1 我的数据库表设计十分的简单:说白了,也就是记录下,以后避免这样的错误发生其中id是自增id,其余的字段都是非主键,执行的时候一直报错 Incorrect integer value: '' for column 'zhuticengshu' at row 1 问题测试 首先将后台打印

iOS中 报错:mutating method sent to immutable object

今天我在切换账号登录,获取用户信息时,程序崩溃,报错:mutating method sent to immutable object 当我设置全局断点进行调试时,这个就是给我们所报错的方法,并打印报错信息 这是我们所调用的方法的地方,此时self.msgDict是不可变的字典,将它改为可变字典即可. 另外:mutating method sent to immutable object的意思就是说:要可变对象调用的方法,使用不可变对象调用

easyui Datagrid查询报错Uncaught TypeError:Cannot read property &#39;length&#39; of undefined

1.问题描述 easyui中datagrid执行loadData方法出现如下异常:Cannot read property 'length' of undefined 2.一开始怀疑是js或者页面的问题,然后从早上干到下午,网上各种方法用尽了就是不行! 最后发现规律了: 使用mybatis从数据库查询返回的List不报错,但是自己new的ArrayList总是报错! 后来发现原来mybatis返回的不是ArrayList!而是PageList! 3.解决问题 PageList中有个参数Pagin

jQuery mobile报错 Uncaught TypeError: Cannot read property &#39;concat&#39; of undefined

写一个jQuery mobile的demo <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="styl

python webdriver 报错WebDriverException: Message: can&#39;t access dead object的原因(pycharm中)

PyCharm中运行firefox webdriver访问邮箱添加通讯录的时候报错-WebDriverException: Message: can't access dead object 调了半天,发现是因为在登录操作后没有从frame中切换出来导致的,因为在登录的时候需要先切换到frame中,登录之后要切换出来才能继续其他操作. 下面是我运行的代码,driver.switch_to.default_content()这一行被我注释掉了,结果就报这个错 代码:driver=webdriver

当使用npm run build的时候报错:TypeError: Cannot read property &#39;thisCompilation&#39; of undefined

最近接手公司前端外包出去的的项目,然后在npm run build的时候遇到了两个问题. 第一点是  A complete log of this run can be found in:npm ERR!     C:\Users\90422\AppData\Roaming\npm-cache\_logs\2018-04-28T09_26_42_435Z-debug.log 这个问题很简单,主要是npm自己报错了,更新npm 即可.(奇怪的只是这个项目需要这样,其他项目并没有这个问题,所以还需要

ueditor禁用编辑的时候报错:Uncaught TypeError: Cannot read property &#39;contentEditable&#39; of undefined

解决方案 报错的代码片段↓ //初始化编辑器 var conEditor = UE.getEditor('id_Test'); //编辑器.禁用 conEditor.setDisabled(); 修复后代码片段↓ //初始化编辑器 var conEditor = UE.getEditor('id_Test'); //对编辑器的操作最好在编辑器ready之后再做 conEditor.ready(function () { //编辑器.禁用 conEditor.setDisabled(); }) u

解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束

Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的位置. (3)collection:根据传入的参数值确定. (4)open:表示该语句以什么开始. (5)separator:表示在每次进行迭代之间以什么符号作为分隔 符. (6)close:表示以什么结束. 首先,错误的xml配置文件如下: <insert id="save" da