你好我有这样的json数据
来自NSLog的结果(@"JSON sec blnce list:%@",responseObject);:
{
detail = (
{
account = 9X000101300160;
balance = "1.000.000";
date = "<null>";
price = 0;
secCode = 9999;
type = Blocked;
value = 0;
},
{
account = 9X000101300160;
balance = "1.000.000";
date = "<null>";
price = 0;
secCode = 9999;
type = Available;
value = 0;
}
);
header = {
date = 24092012;
investorID = IDD010239865303;
securityType = Equity;
};
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是将这个json结果保存到NSUserDefaults中.这是我如何保存:在.h
@property NSDictionary *jsonResult;
Run Code Online (Sandbox Code Playgroud)
在.m
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[manager POST:URI_SECURITY_BALANCE_DETAIL parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {
[SVProgressHUD dismiss];
NSLog(@"JSON sec blnce list: %@", responseObject);
self.jsonResult = responseObject;
//simpan hasil query ke device
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.jsonResult forKey:@"securityBalanceNextJsonResult"];
[defaults synchronize];
Run Code Online (Sandbox Code Playgroud)
但上面的代码给我一个错误:"尝试设置非属性列表对象"
我如何保存从json结果到NSUserDefaults的NSDictionary?
更新:(已解决)可能是有人有同样的问题,这里是我的工作代码如何:
self.jsonResult = responseObject;
NSData *data = [NSJSONSerialization dataWithJSONObject:self.jsonResult options:kNilOptions error:nil];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"securitiesBalanceJsonResult"];
NSError* error;
NSDictionary* jsonDB = [NSJSONSerialization
JSONObjectWithData:[defaults objectForKey:@"securitiesBalanceJsonResult"]
options:kNilOptions
error:&error];
NSLog(@"data:%@",jsonDB);
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一解释是你的服务器在JSON中发送空值.当结果转换为a时NSDictionary,会将实例NSNull插入到字典中以表示这些空值.
但是,NSNull这不是属性值,这就是为什么您无法将字典存储在用户默认值上的原因.正如NSUserDefaults文档所述:
NSUserDefaults类提供了访问常用类型(如浮点数,双精度数,整数,布尔值和URL)的便捷方法.默认对象必须是属性列表,即(或集合的实例组合)的实例:NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary.如果要存储任何其他类型的对象,通常应将其存档以创建NSData实例.
您有两种选择:
date在detail).NSData.为了第一:
NSMutableDictionary *mutable = [dictionary mutableCopy];
NSArray *array = mutable[@"detail"];
NSMutableArray *mut = [NSMutableArray arrayWithCapacity:[array count]];
for (NSDictionary *d in array)
{
NSMutableDictionary *m = [NSMutableDictionary dictionary];
for (NSString *k in d) {
id v = d[k];
if (![v isKindOfClass:[NSNull class]]) {
m[k] = v;
}
}
[mut addObject:m];
}
mutable[@"detail"] = mut;
Run Code Online (Sandbox Code Playgroud)
对于第二个:
NSData *data = [NSJSONSerialization dataWithJSONObject:dictionary options:kNilOptions error:nil];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:key];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2208 次 |
| 最近记录: |