*** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value ‘<Student: 0x8399f70>’
来源:互联网 发布:吊装计算软件 编辑:程序博客网 时间:2024/05/18 05:01
查看官方的API,NSUserDefaults支持保存的数据类型有:NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary
对于,我们创建的NSObject不可以直接保存,如果调用setObject,会提示出错,信息如下:
*** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value ‘<Student: 0x8399f70>’ of class ‘Student’. Note that dictionaries and arrays in property lists must also contain only property values.
当保存一个Student对象时,提示我,NSUserDefaults没有这样的属性,那么如果想要保存student中的信息,可以将studnet的信息保存到一个NSDictionary中,然后获取到这个NSDictionary,再从它里面获取每一个属性;
当然这种方式弱爆了,注意一下上面保存的类型可以保存NSData类型,不防将Student类转换为NSData类型,然后
取值时再将NSData转化为Student类;
还是用代码来说明:
Student.h 代码
1: #import <Foundation/Foundation.h>
2:
3: @interface Student : NSObject <NSCoding>
4: {
5: NSString *name;
6: }
7: @property (nonatomic, retain) NSString *name;
8:
9:
10: @end
Student.m 代码
1: #import "Student.h"
2:
3: @implementation Student
4: @synthesize name;
5:
6:
7: - (void)encodeWithCoder:(NSCoder *)aCoder
8: {
9: [aCoder encodeObject:self.name forKey:@"name"];
10: }
11:
12: - (id)initWithCoder:(NSCoder *)aDecoder
13: {
14: self = [super init];
15: if (self) {
16: self.name = [aDecoder decodeObjectForKey:@"name"];
17: }
18: return self;
19: }
20:
21:
22: - (void)dealloc
23: {
24: [name release];
25: name = nil;
26: [super dealloc];
27: }
28: @end
调用的代码:
1: Student *student = [[Student alloc] init];
2: [student setName:@"Jordy"];
3:
4: NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
5:
6: NSData *studentData = [NSKeyedArchiver archivedDataWithRootObject:student];
7: [userDefault setObject:studentData forKey:@"Student"];
8: [userDefault synchronize];
9: [student release];
10:
11:
12: NSData *data = [userDefault objectForKey:@"Student"];
13: Student *stu = [NSKeyedUnarchiver unarchiveObjectWithData:data];
14: NSLog(@"stu: %@, stu.name: %@",stu,stu.name);转自:http://mario6.diandian.com/post/2013-02-28/40049432651
0 0
- *** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value ‘<Student: 0x8399f70>’
- -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '<Player: 0x3b0cc90>' of c
- 错误:*** -[NSUserDefaults setObject:forKey:]: attempt to insert non-property list object
- NSUserDefaults:Attempt to insert non-property value Objective C
- NSUserDefaults插入报错attempt to insert non-property list
- NSUserDefaults 存数据 Attempt to insert non-property list object
- NSUserDefaults插入报错attempt to insert non-property list object
- iOS---NSUserDefaults插入报错attempt to insert non-property list object
- Attempt to insert non-property list object - 芒果iOS
- iOS使用NSUserDefaults 存储数据报Attempt to set a non-property-list object as an NSUserDefaults value的错误解决
- Attempt to set a non-property-list object as an NSUserDefaults
- NSUserDefaults数据保存报错:Attempt to set a non-property-list object...
- [User Defaults] Attempt to set a non-property-list object () as an NSUserDefaults/CFPreferences valu
- Attempt to set a non-property-list object null as an NSUserDefaults
- iOS NSUserDefaults数据保存报错:Attempt to set a non-property-list object...
- Attempt to set a non-property-list object
- [User Defaults] Attempt to set a non-property-list object
- Attempt to set a non-property-list object
- SAE 和 AWS 以及其它
- 基于小文件的分布式文件存储方案(JDistFS)
- java 泛型 T 和 Object 那些故事
- Oracle 11g 使用SQL Tuning Advisor调优SQL语句
- LeetCode Remove Duplicates from Sorted List
- *** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value ‘<Student: 0x8399f70>’
- python Hadoop Streaming程序测试
- Python写的简单的端口监听,显示端口上收到的数据,TCP的
- C#正则表达式Regex类使用
- 求数组的子数组之和的最小值
- 剑指XX游戏(四) - 轻松搞定面试中的“虚”
- C语言:使用配置文件
- Java 强制类型转换(类转换注意事项)
- 用C++进行设计模式的解析和实现