On 6 Aug 2009, at 07:58, Arie Pieter Cammeraat wrote:

I would like a more obj-c style, like
        globals.h:
                extern NSColor * const kNiceBlueColor

        globals.m:
        #import globals.h

NSColor * const kNiceBlueColor = [NSColor colorWithRed: 20 green: 20 blue: 240 alpha:1];

I found some examples of this kind for defining a NSString using the @"foo"-syntax. With NSColor, it doesn't seem to work. I get the error "initializer element is not constant". Anyone any thoughts on this?


You can do something like your example above, but because you aren't allowed to send messages (or to call functions) from initialisers of global variables in C, you'd need to initialise them in some other way (for instance from an appropriate +initialize method).

Other alternatives (possibly safer, since you can't rely on the order in which +initialize methods are called) include:

-  Adding your new colours as new methods on a category of NSColor.

- Adding your new colours as new methods on some global object in your application.

- Adding your new colours as new methods on some other appropriate object in your app.

In all of these alternative cases, you'd probably actually end up with a static NSColor * and implement something like this:

  + (NSColor *)myNiceBlueColour
  {
    static NSColor *myNiceBlueColour;

    if (!myNiceBlueColour)
myNiceBlueColour = [[NSColor alloc] initWithRed:0.1 green:0.1 blue:0.8 alpha:1.0];

    return myNiceBlueColour;
  }

(Remember, by the way, that you need to use floating point values between 0 and 1, rather than the integers you show in your example above.)

Kind regards,

Alastair.

--
http://alastairs-place.net



_______________________________________________

Cocoa-dev mailing list ([email protected])

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to