Dou*_*ith -2 c struct objective-c nsuserdefaults ios
我很只是想保存NSMutableArray/ NSArray的structS IN NSUserDefaults:
typedef struct {
int key;
} provision;
provision p1;
p1.key = 4;
NSValue *p1Value = [NSValue value:&p1 withObjCType:@encode(provision)];
provision p2;
p2.key = 5;
NSValue *p2Value = [NSValue value:&p2 withObjCType:@encode(provision)];
NSMutableArray *provisions = [[NSMutableArray alloc] init];
[provisions addObject:p1Value];
[provisions addObject:p2Value];
[[NSUserDefaults standardUserDefaults] setObject:provisions forKey:@"Provisions"];
Run Code Online (Sandbox Code Playgroud)
我按照指南这里存储了所有的结构NSValue.但是最后一行会导致运行时错误:
*因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [NSUserDefaults setObject:forKey:]:尝试为关键项目插入非属性列表对象("<04000000>","<05000000>")
我究竟做错了什么?
默认对象必须是一个属性列表,即,(或对集合的实例的组合)的实例:
NSData,NSString,NSNumber,NSDate,NSArray,或NSDictionary.如果要存储任何其他类型的对象,通常应将其存档以创建实例NSData.
发生异常是因为您尝试存储NSValue对象.要将结构存储为NSData,请使用
NSData *p1data = [NSData dataWithBytes:&p1 length:sizeof(p1)];
Run Code Online (Sandbox Code Playgroud)
并提取从它NSData与
[p1data getBytes:&p1 length:sizeof(p1)];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |