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

来源:互联网 发布:伍聚网络招聘 编辑:程序博客网 时间:2024/05/03 09:41

在使用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再存入。

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

/// 存储缓存数据

            //去除 <null> 对存储的影响

            NSMutableDictionary *muUserInfoDict = [NSMutableDictionarydictionary];

            for (NSString *keyTempin appDelegate.globalUserInfo.allKeys) {

                NSString *stringTemp = [appDelegate.globalUserInfoobjectForKey:keyTemp];

                if ([stringTempisEqual:@"<null>"] || [stringTempisEqual:@"null"] || [stringTempisEqual:@"(null)"] ||[stringTemp isKindOfClass:[NSNullclass]]) {

                    stringTemp =@"";

                }

                [muUserInfoDictsetObject:stringTemp forKey:keyTemp];

            }

            

            [USER_STANDARD_DEFAULTSsetObject:[NSDictionarydictionaryWithDictionary:muUserInfoDict]forKey:USER_INFO_KEY];

            [USER_STANDARD_DEFAULTSsetObject:appDelegate.userKeyStringforKey:USER_KEY];

            [USER_STANDARD_DEFAULTSsynchronize]; //数据持久化


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

0 0
原创粉丝点击