0

In my objective-c project, I have a protocol like this:

@protocol MyProtocol

-(id) get:(NSString *) key;

-(void) set:(NSString *) key withValue:(id) value;

-(NSValue *) getSize;

-(void) setSize:(NSValue *) value;

-(NSValue *) getBounds;

-(void) setBounds:(NSValue *) value;

@end

OBJC_EXPORT const NSString *MYPROTOCOL_SIZE;
OBJC_EXPORT const NSString *MYPROTOCOL_BOUNDS;

And basically, those specific methods (getSize, getBounds, setSize, setBounds) are supposed the value that is supposed to be stored in MYPROTOCOL_SIZE and MYPROTOCOL_BOUNDS, respectively.

However, I cannot find an effective way to set those constant strings, by concatenating the results of other methods, because it gives me the error: initializer element is not constant when I try to set them directly. Is there a way I can guarantee that the objects will always be initialized. (e.g. in a classes load method), without having to manually call code when my program runs?

Richard J. Ross III
  • 55,009
  • 24
  • 135
  • 201

1 Answers1

-1

Well first of all, you should learn the naming convention, for accessors you have - (Type); and - (void)set:(Type)value; whereas in your case you did: - (Type)get; and - (void)set:(Type)value;

I advise you to use @property for your size and bounds accessors too.

Now about the "const" in the NSString variable declaration, it doesn't make sense. Const applies to the type on its left and in case it is at the beginning of the line it applies to the token directly on its right. So what you have is a "const NSString" which doesn't make sense because NSString is already immutable, and sending mutating messages to a const object doesn't issue any warning or errors...

What you actually want is "NSString *const" which states that the pointer to your NSString is constant, you can only assign it at initialization and then it doesn't change...

Now about the protocol... Are you sure you want a protocol in your case ? And not an abstract class that would have your 2 NSString as readonly accessors ?

Psycho
  • 1,863
  • 1
  • 16
  • 17
  • Yes, I need a protocol, and you are right about the constant strings... There is a reason why I am doing it this way, mainly because I am porting this as another project from java... this is essentially a mini-dictionary of types... – Richard J. Ross III Jan 12 '11 at 18:11