我正在使用RestKit(最新版本0.23.1),我已经在字符串值到数字字段之间定义了一个自定义变换器,如下所示:
mapping.valueTransformer = [RKBlockValueTransformer valueTransformerWithValidationBlock:^BOOL(__unsafe_unretained Class inputValueClass, __unsafe_unretained Class outputValueClass) {
return [inputValueClass isSubclassOfClass:[NSString class]];
} transformationBlock:^BOOL(id inputValue, __autoreleasing id *outputValue, __unsafe_unretained Class outputClass, NSError *__autoreleasing *error) {
if (![inputValue isKindOfClass:[NSString class]]) {
return NO;
}
// conversion logic follows...
return YES;
}];
变换器正常工作,但是没有调用验证块(我设置了断点来验证),这迫使我在transformBlock中检查inputValue确实是NSString的一个实例。
为什么不调用验证块,我做错了什么? 我在RestKit GitHub页面上找不到任何问题。
答案 0 :(得分:1)
您正在将变压器直接设置到映射上并作为唯一的变压器,因此假定它始终适用。
您希望将转换器设置为RKCompoundValueTransformer
(使用defaultValueTransformer
和您的自定义转换器),因为它在应用转换之前会执行验证。