Как обрабатывать непредвиденные типы данных с помощью Mantle

В моем подклассе MTLModel у меня есть это:

@property (assign, nonatomic) NSInteger catId;

И конечно это при реализации:

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{

             @"catId" : @"cat_id"

             };

}

Но что, если мои друзья на сервере решат изменить cat_id на строку в ответе JSON? Как я могу обработать этот случай и преобразовать его в int, чтобы я не получал ошибки Mantle?

2 ответа

Мы также использовали Mantle довольно долгое время, но в конце перешли на рукописный анализатор / сериализаторы, так как сама задача кажется тривиальной.

Однако у нас также есть проблемы такого рода: что, если сервер вернет то, чего мы не ожидаем (например, NSDictionary вместо NSString).

Чтобы предотвратить сбои нашего приложения, мы используем этот простой инструмент: Fuzzer.

В основном инструмент предоставляет метод, который берет образец и блок. Блок оценивается несколько раз, каждый раз принося слегка видоизмененную версию семпла. Вы можете проверить поведение моделей / анализаторов / сериализаторов, используя мутанты, чтобы убедиться, что ваш код корректно обрабатывает неожиданные данные.

Вот пример, взятый из проекта README:

- (void)test {
  NSDictionary *sample = @{
    @“name” : @“John Doe”,
    @“age” : @42
  };

  UserDeserializer *deserializer = [UserDeserializer new];

  FZRRunner *runner = [FZRRunner runnerWithBuiltinMutationsForSample:sample];

  NSArray *reports = [runner enumerateMutantsUsingBlock:^(NSDictionary *mutant) {
    [deserializer deserializeUser:mutant];
  }];

  XCTAssertEqual(reports.count, 0);
}
if([obj isKindOfClass:NSClassFromString(@"__NSCFNumber")])
{
//if it is int or number
}
else
{

}

Может быть, выше метод поможет вам

Другие вопросы по тегам