如何使用Mantle处理意外的数据类型

时间:2016-02-19 02:15:21

标签: ios github-mantle

在我的MTLModel子类中,我有这个:

@property (assign, nonatomic) NSInteger catId;

当然这在实施中:

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{

             @"catId" : @"cat_id"

             };

}

但是如果我的服务器朋友决定将cat_id更改为JSON响应中的字符串怎么办?我如何处理这种情况,并将其转换为int,以便我不会得到Mantle错误?

2 个答案:

答案 0 :(得分:1)

我们也使用Mantle很长一段时间,但最后迁移到手写的解析器/序列化器,因为任务本身似乎微不足道。

尽管如此,我们也遇到了这样的问题:如果服务器返回了我们不期望的内容(例如NSDictionary而不是NSString),该怎么办。

为防止我们的应用崩溃,我们使用这个简单的工具:Fuzzer

基本上,该工具提供了一个采样和块的方法。该块会多次评估,每次都会带来轻微变异的样本。您可以使用突变体检查模型/解析器/序列化程序的行为,以确保您的代码正常处理意外数据。

以下是项目自述文件中的示例:

- (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);
}

答案 1 :(得分:0)

if([obj isKindOfClass:NSClassFromString(@"__NSCFNumber")])
{
//if it is int or number
}
else
{

}

可能上面的方法会帮助你