Mantle:解析 JSON 时未捕获的异常“NSInvalidArgumentException”
Posted
技术标签:
【中文标题】Mantle:解析 JSON 时未捕获的异常“NSInvalidArgumentException”【英文标题】:Mantle: Uncaught exception 'NSInvalidArgumentException' when parsing JSON 【发布时间】:2015-09-02 05:19:37 【问题描述】:我正在使用Mantle
框架,我似乎在将一些值序列化为MTLModel
时遇到了一些问题。这是我从服务器收到的JSON
:
"id":50,
"name":"UserName",
"email":"user@username.com",
"profile":
"picture":
"original": "http://original.com/picture",
"versions":
"thumb": "http://thumb.com/picture",
"small": "http://small.com/picture"
我已经通过以下方式设置了我的MTLModel
s:
用户
@interface User : MTLModel <MTLJSONSerializing>
@property (nonatomic, readonly) NSNumber *id;
@property (nonatomic) NSString *name;
@property (nonatomic) NSString *email;
@property (nonatomic) Profile *profile;
@end
@implementation User
+ (NSDictionary *)JSONKeyPathsByPropertyKey
return @
@"id": @"id",
@"name": @"name",
@"email": @"email",
@"profile": @"profile"
;
- (NSValueTransformer *)profileJSONTransformer
return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSDictionary *profileDict)
return [MTLJSONAdapter modelOfClass:Profile.class
fromJSONDictionary:profileDict
error:nil];
reverseBlock:^(Profile *profile)
return [MTLJSONAdapter JSONDictionaryFromModel:profile];
];
@end
个人资料
@interface Profile : MTLModel <MTLJSONSerializing>
@property (nonatomic) Picture *picture;
@end
@implementation Profile
+ (NSDictionary *)JSONKeyPathsByPropertyKeys
return @
@"picture": @"picture"
;
- (NSValueTransformer *)pictureJSONTransformer
return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSDictionary *picDict)
return [MTLJSONAdapter modelOfClass:Picture.class
fromJSONDictionary:picDict
error:nil];
reverseBlock:^(Picture *picture)
return [MTLJSONAdapter JSONDictionaryFromModel:picture];
];
@end
图片
@interface Picture : MTLModel <MTLJSONSerializing>
@property (nonatomic) NSString *original;
@property (nonatomic) Versions *versions;
@end
@implementation Picture
+ (NSDictionary *)JSONKeyPathsByPropertyKeys
return @
@"original": @"original",
@"versions": @"versions"
;
- (NSValueTransformer *)versionsJSONTransformer
return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSDictionary *versionDict)
return [MTLJSONAdapter modelOfClass:Versions.class
fromJSONDictionary:versionDict
error:nil];
reverseBlock:^(Versions *versions)
return [MTLJSONAdapter JSONDictionaryFromModel:versions];
];
@end
版本
@interface Versions : MTLModel <MTLJSONSerializing>
@property (nonatomic) NSString *thumb;
@property (nonatomic) NSString *small;
@end
@implementation Versions
+ (NSDictionary *)JSONKeyPathsByPropertyKey
return @
@"thumb": @"thumb",
@"small": @"small"
;
@end
我正在执行以下Overcoat
POST 调用来获取 JSON。当我NSLog
响应时,我收到了 JSON 格式:
[[Client getInstance] POST:@"authorize.json" parameters:params completion:^(id response, NSError *error)
if (!error)
User *user = [MTLJSONAdapter modelOfClass:[User class] fromJSONDictionary:[response result] error:nil];
Picture *picture = [[user profile] picture];
NSLog(@"%@", picture);
else
NSLog(@"%@", error);
];
当我尝试像这样抓取Picture
对象时出现问题:
Picture *picture = [[user profile] picture];
我得到一个例外:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary picture]: unrecognized selector sent to instance 0x7f95026d4210'
我该如何解决这个问题?我做错了什么?
【问题讨论】:
【参考方案1】:您没有正确解析您的 json。图片字典嵌套在配置文件中。 得到它喜欢的东西
Nsmutabledictinary *profile=[jsondic objectforkey:@"Profile"];
Nsmutabledictinary *picture=[profile objectforkey:@"Picture"];
请更正语法错误,因为我没有在编辑器中编写代码,因此代码中可能存在语法错误。谢谢
【讨论】:
我不相信这是正确的答案,这会破坏使用MTLModel
对象的目的。
这也不会编译,因为objectForKey
不是MTLModel
函数。
错误只是json解析不正确。我只是以正确的方式解析了json。谢谢
objectforkey 是 nsmutabledictionary 而非 MTLModel 的方法。
这不回答我的问题,我的问题与Mantle
有关以上是关于Mantle:解析 JSON 时未捕获的异常“NSInvalidArgumentException”的主要内容,如果未能解决你的问题,请参考以下文章
选择图像时未捕获的异常“NSInvalidArgumentException”