On Jul 11, 2012, at 1:45 PM, Motti Shneor wrote:

> Wow, and thanks, everyone. BTW, what does "OP" stand for? (obviously, its 
> me...)

OP = original poster

> Of what I read from everyone, and after examining the suggested code from 
> Jens Alfke, I think I'm inclined to something simpler, hinted by  Keary 
> Suska.  Could you spare a few more words on the "undefinedKey" override? 

This is part of the NSKeyValueCoding protocol 
http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html.

> I'd like to avoid dynamic auto-generation of methods at runtime. I can't see 
> why this is needed --- ALL my getters and setters will look exactly the same.

Actually, generation of methods is exactly what you want, because all of your 
getters and setters will look exactly the same.  The question arises as to how 
they should be generated.

1.  Copy-Paste: bad idea. lots of code, really slow, easy to mess up, etc
2.  At Runtime: arguably the most flexible approach, but also the most complex.
3.  At compiletime: easy to understand.  Define a macro that you would use 
instead of "@synthesize" or "@dynamic".  Something like this:

#define SYNTHESIZE(_property, _setter) \
- (void) _setter (id)newValue { \
[internalMutableDict setObject:newValue forKey:@"" ##_property]; \
} \
- (id) _property  { \
return [internalMutableDict objectForKey:@"" ##_property]; \
}

And then you'd do:

@implementation Foo

SYNTHESIZE(firstName, setFirstName:)
SYNTHESIZE(lastName, setLastName:)
SYNTHESIZE(age, setAge:)

@end

And so on.  (Warning, typed in a Mail window and not tested)

Dave

> 
> We have dozens such "data classes", and I hate to copy-paste zillions of 
> exactly-the-same implementations by hand.  For every property (e.g. 
> "firstName") I would need to to write
> 
> - (NSString *)firstName {
>       return [internalMutableDict valueForKey:firstName];
> }
> - (void) setFirstName :(NSString *)firstName {
>       [internalMutableDict setValue:firstName forKey:@"firstName"];
> }
> 
> Isn't writing 1000 such implementations error-prone? call for automation of 
> some kind?
> 
> The reason we insist on dot-notation for accessing these objects, is that the 
> code which does this, is written in C++ or C style, using structs and dot 
> notation. That code could compile with no change against C++ data objects (in 
> Windows) or against my Propery-based data objects for Mac. 
> 
> So... It's not that we're anti-CD, on the contrary.... only this is a big 
> project with lot's of legacy shared code imposed on the system, to say 
> nothing of legacy thinking  and "shared thoughts" by management. 
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to