在我的MTLModel子类中,我有这个:
@property (assign, nonatomic) NSInteger catId;
当然这在实施中:
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
return @{
@"catId" : @"cat_id"
};
}
但是如果我的服务器朋友决定将cat_id更改为JSON响应中的字符串怎么办?我如何处理这种情况,并将其转换为int,以便我不会得到Mantle错误?
答案 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
{
}
可能上面的方法会帮助你