Question

NSValueTransformer is used to transform a value. But what if the transformation needs more contextual information? For example how can a NSValueTransformer access other objects in the nib, or access the view controller? Is this just not what NSValueTransformer is meant to be used?

As an example I want to bind a text view's attributed string to an employee's name, using a value transformer to format the name based on the employee's department.

My solution so far has been to just implement a new employeeNameForDisplay property or so, skipping value transformers altogether.

If that's truly the best solution, I have a hard time understand the value of value transformers. Are they really this limited?

Was it helpful?

Solution

Doc quote ...

NSValueTransformer is an abstract class that is used by the Cocoa Bindings technology to transform values from one representation to another.

... it's a very simple class, which transforms values between different representations. Sometimes I do use it with Cocoa Bindings, but I heavily do use it with CoreData where I need better (smaller, faster, ...) representation for underlying sqlite store. So, this class has the value for us even if you can't achieve your goal with it.

Also I would solve like you do. New property along with ...

+ (NSSet *)keyPathsForValuesAffectingEmployeeNameForDisplay:(NSString *)key {
    return [NSSet setWithArray:@[ @"employeeName", @"employeeDepartment" ]];
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top