В модели данных я определил цвет как преобразуемый атрибут и назначил ему ColorTransformer. Он работает, с помощью одного и того же трансформатора я могу привязать его к ColorPicker, сохранить и открыть документ. Но когда я пытаюсь получить доступ к нему из кода:Почему мой класс NSColor NSConcreteData?
NSColor * color = corner.color;
NSLog(@"Corner Color = %@\n%@", color, color.class);
Я получил объект из NSMutableConcreteData:
bezierMesh[22164:730708] Corner Color = <040b7374 7265616d 74797065 6481e803 84014084 8484074e 53436f6c 6f720084 84084e53 4f626a65 63740085 84016301 84046666 66660183 6eb7613d 8357703e 3e8352b8 1e3f86>
NSConcreteMutableData
Изменение геттер и сеттер не помогает:
- (NSColor *)color {
[self willAccessValueForKey:@"color"];
NSData *colorData = [self primitiveValueForKey:@"color"];
[self didAccessValueForKey:@"color"];
if (colorData == nil) {
return nil;
}
NSColor * color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];
return color;
}
- (void)setColor:(NSColor *)color {
NSLog(@" -------------- > Setting color %@", color);
NSData * theData=[NSArchiver archivedDataWithRootObject:color];
[self willChangeValueForKey:@"color"];
[self setPrimitiveValue:theData forKey:@"color"];
[self didChangeValueForKey:@"color"];
}
Это вызывает ошибку:
[NSKeyedUnarchiver initForReadingWithData:]: non-keyed archive cannot be decoded by NSKeyedUnarchiver
Как получить цвет NSColor?
Является ли это подклассом «NSValueTransformer», о котором мы говорим здесь? Если это так, то вы не используете его из кода. – trojanfoe
BMColorTransformer является подклассом NSTransformer. Но, может быть, есть правильный вопрос: как использовать подкласс NSTransformer в коде? –
NSValueTransformer конечно –