Dicionário JSON ausente (manto)
-
21-12-2019 - |
Pergunta
Estou tentando converter esse JSON em um modelo:
[
{
"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"
}
]
Esta é a minha aula:
@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
Pensei que se eu nomeasse os vars exatamente da mesma forma, não seria necessário implementar JSONKeyPath, mas o fiz.
E este é o meu método para converter:
-(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);
}
}
onde model é meu nome de classe e responseObject é apenas um objeto de identificação que preenchi com AFNetworking.
Estou sempre recebendo este erro:
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
Solução
Sua resposta é uma série de dicionários, então você deve usar o Método MTLJSONAdapter modelsOfClass:fromJSONArray:error: para convertê-los em uma variedade de modelos Mantle.
Seu código deve ser alterado conforme abaixo:
-(void) convertFrom:(id) responseObject toModel:(Class) model resultBlock: (NetworkBlock)resultBlock
{
NSError * didFail;
id result = [MTLJSONAdapter modelsOfClass:model fromJSONArray:responseObject error:&didFail];
//...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow