Mar 26 2009
∞
Initialising Cocoa NSValueTransformers
Just a quicky, I created my first custom Value Transformer this evening. Normally to register your transformer you have to do something like the following
+ (void)initialize
{
[super initialize];
[self initialiseValueTransformers];
}
+ (void)initialiseValueTransformers
{
LoginStatusTransformer *loginStatusTransformer =
[[[LoginStatusTransformer alloc] init] autorelease];
[LoginStatusTransformer setValueTransformer:loginStatusTransformer
forName:@"LoginStatusTransformer"];
}
which hurt that part of my brain which likes clean code because of all the repetition.
So I cooked up a nice little pre-processor macro to tidy it up
#define init_transformer(klass) \
klass *vt##klass = [[[klass alloc] init] autorelease]; \
[klass setValueTransformer:vt##klass forName:@""#klass]
so now I have
+ (void)initialiseValueTransformers
{
init_transformer(LoginStatusTransformer);
}
which will be expanded out to
+ (void)initialiseValueTransformers
{
LoginStatusTransformer *vtLoginStatusTransformer =
[[[LoginStatusTransformer alloc] init] autorelease];
[LoginStatusTransformer setValueTransformer:vtLoginStatusTransformer
forName:@"LoginStatusTransformer"];
}
it seems to be working for me at the moment, any bugs in the macro please let me know.