3

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

@property (assign, nonatomic) NSInteger catId;

当然,这在实现中:

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{

             @"catId" : @"cat_id"

             };

}

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

4

2 回答 2

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);
}
于 2016-03-29T14:50:34.773 回答
0
if([obj isKindOfClass:NSClassFromString(@"__NSCFNumber")])
{
//if it is int or number
}
else
{

}

可能以上方法对你有帮助

于 2016-03-28T06:58:48.120 回答