У меня есть простой NSValueTransformer
, который должен преобразовать строку first, second, third
в массив. Поэтому в моей схеме CoreData у меня есть атрибут options
, который я установил в Transformed
и укажите свой трансформатор.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
никогда не «касаются» при использовании отладчика.
Но я не могу создать трансформатор, который преобразует числа от «одного» до «десяти» в числа 1 - 10. Нужно ли это NSData? – Besi
Учтите, что в CoreData могут быть сохранены объекты Objective-C. Таким образом, нет чисел, кроме NSNumber, NSDate, NSString или NSData. Я не понимаю вашей главной цели, чтобы дать вам несколько советов. Но, возможно, вам стоит добавить дополнительный объект к вашей модели и отношение «один-ко-многим», чтобы добавить некоторый набор строк в вашу сущность. Это может быть более элегантное и эффективное решение. – voromax