objective-c - JSON 缺失字典(地幔)

标签 objective-c json github-mantle

我正在尝试将此 JSON 转换为模型:

  [
    {
        "status": "Top-up done",
        "amount": "25.00",
        "amount_ex_vat": "20.66",
        "executed_on": "2014-07-28 20:21:33",
        "method": "Bancontact/Mister Cash",
        "payment_received_on": "2014-07-28 20:21:29"
    },
    {
        "status": "Top-up done",
        "amount": "15.00",
        "amount_ex_vat": "12.40",
        "executed_on": "2014-05-26 19:41:36",
        "method": "PayPal",
        "payment_received_on": "2014-05-26 19:41:31"
    },
    {
        "status": "Top-up done",
        "amount": "10.00",
        "amount_ex_vat": "8.26",
        "executed_on": "2014-02-26 20:43:39",
        "method": "PayPal",
        "payment_received_on": "2014-02-26 20:43:35"
    },
    {
        "status": "Top-up done",
        "amount": "15.00",
        "amount_ex_vat": "12.40",
        "executed_on": "2014-01-18 12:43:09",
        "method": "PayPal",
        "payment_received_on": "2014-01-18 12:43:06"
    }
]

这是我的课:

@interface TopupHistory : MTLModel 
@property (strong, nonatomic) NSString * amount;
@property (strong, nonatomic) NSString * executed_on;
@property (strong, nonatomic) NSString * method;
@end

@implementation TopupHistory

(NSDictionary *)JSONKeyPathsByPropertyKey { return @{ @"amount": @"amount", @"executed_on": @"executed_on", @"method": @"method", }; } @end

我想如果我将变量命名为完全相同,就没有必要实现 JSONKeyPath 但我做到了。

这是我的转换方法:

-(void) convertFrom:(id) responseObject toModel:(Class) model resultBlock: (NetworkBlock)resultBlock
{
NSError * didFail;
id result = [MTLJSONAdapter modelOfClass:model fromJSONDictionary:responseObject error:&didFail];
if (!didFail) {
resultBlock(result,nil);
}
else
{
NSLog(@"Couldn't convert app infos JSON to model: %@", didFail);
resultBlock(nil,didFail);
}
}

其中 model 是我的类名,responseObject 只是我用 AFNetworking 填充的 id 对象。

我总是收到此错误:

Domain=MTLJSONAdapterErrorDomain Code=3 "Missing JSON dictionary" UserInfo=0x913a690 {NSLocalizedFailureReason=TopupHistory could not be created because an invalid JSON dictionary was provided: __NSCFArray, NSLocalizedDescription=Missing JSON dictionary}
2014-07-29 13:11:55.780 test Info[10953:60b] Missing JSON dictionary

最佳答案

您的响应是一个字典数组,因此您应该使用 MTLJSONAdapter method modelsOfClass:fromJSONArray:error:将它们转换为 Mantle 模型数组。

您的代码应更改如下:

-(void) convertFrom:(id) responseObject toModel:(Class) model resultBlock: (NetworkBlock)resultBlock
{
NSError * didFail;
id result = [MTLJSONAdapter modelsOfClass:model fromJSONArray:responseObject error:&didFail];
//...

关于objective-c - JSON 缺失字典(地幔),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25014948/

相关文章:

javascript - json 转键值数组

ios - 如何让 YapDatabase 和 Mantle 很好地处理序列化

ios - undefined symbol : _OBJC_CLASS_$_WKInterfaceController error after updating Xcode to version 11. 1

ios - 安排交互式 UILocalNotification - Obj-C

objective-c - NSUrlConnection 的 iOS 错误 URL

javascript - Jquery/JSON 处理 XHR 响应

javascript - JSON.parse() 没有给出预期的结果

objective-c - 使用 Mantle 将 NSString 转换为 JSON 数组中的 NSURL

objective-c - 如何使用 CocoaPods 将 GitHub 的 Mantle 添加到 Xcode

javascript - 将 NSArray 发送到 javascript