我有一个简单的NSValueTransformer
,它应该将逗号分隔的字符串first, second, third
转换为数组。所以在我的CoreData架构中,我有属性options
,我将其设置为Transformed
并指定我的Transformer。CoreData在返回字符串时返回数组和NSData时需要一个字符串
这是我的变压器:
-(id)transformedValue:(id)value{
// convert it to an array
if(!value){
return nil;
} else{
NSString *languages = value;
NSArray *result = [languages componentsSeparatedByString: @", "];
// return result;
return @"test Result";
}
}
现在,当我返回变量result
我得到以下错误(length
看起来像它预期的NSString
):
... 'NSInvalidArgumentException', reason: '-[__NSArrayI length]: unrecognized selector sent to instance 0x6cc59a0'
如果我回到测试字符串而不是我得到这个错误(bytes
看起来像它期待一个NSData
对象):
... 'NSInvalidArgumentException', reason: '-[__NSCFConstantString bytes]: unrecognized selector sent to instance 0xf0780'
看起来好像有一个概念性问题,我似乎没有把握。当使用调试器时,也不会“感动”+(Class)transformedValueClass
和+(BOOL)allowsReverseTransformation
。
但我无法创建一个变换器,将数字从“one”变为“ten”,变成数字1 - 10.它是否必须是NSData? – Besi 2012-02-29 21:09:14
考虑到只有Objective-C对象可以存储到CoreData中。所以除了NSNumber,NSDate,NSString或NSData之外,没有数字。我不明白你的主要目标是给你一些建议。但是,也许你最好在你的模型中添加一些额外的对象,并且将一对多关系添加到你的实体中。这可能是更优雅和有效的解决方案。 – voromax 2012-02-29 21:26:52