开发者

Access NSMutableArray from a different class

开发者 https://www.devze.com 2023-02-15 20:21 出处:网络
I have a class where a NSMutableArray object is formed, as so: navBarColour = [[NSMutableArray alloc] initWithObjects:colourOfNavBar, nil];

I have a class where a NSMutableArray object is formed, as so:

navBarColour = [[NSMutableArray alloc] initWithObjects:colourOfNavBar, nil];

I then have another class, which has the first class added to it properly, but it won't let me access the NSM开发者_开发百科utableArray from the first class. This line of code:

NSLog(@"%@", [HandlingPalettes.navBarColour objectAtIndex:0]);

Returns:

expected ':' before '.' token

But:

NSLog(@"%@", [navBarColour objectAtIndex:0]);

would work in the original class.

What am i doing wrong here?


The dot notation is used differently in objective c that from c++ or java. In objective-c it is shorthand for accessing a property. You need to have defined a objective-c property first, like this:

in the .h file (INSIDE the interface tag)

@property (nonatomic, retain) NSMutableArray *navBarColor;

in the .m file (INSIDE the implementation tag)

@synthesize navBarColor;

Only then can you access the array with the dot notation.


(Actually, futureelite7 & Radek S aren't strictly correct, in that you don't need @property declaration to use dot notation. If there's a getter method called navBarColour then the dot notation works fine for that too. But that's another issue.)

The declaration for the property navBarColour must visible to your code containing the NSLog. Yes, do post your header file, if you say the added @property declaration is also failing to compile then you have something weird going on. Make sure your other class' .m is including that header, and that HandlingPalettes's class isn't merely declared with a forward declaration say (@class Blah;).

But also, is HandlingPalettes a class or an instance?!? Identifiers starting with capitol letters by convention imply its a class name, so that's suspicious. If it's a class name, then that's surely not what you want.

(Regarding using dot notation without @property, if HandlingPalettes is indeed a class, then if you had the class method +(NSMutableArray*)navBarColour then when it would compile.)


You must add a property to the object containing the array and synthesize it:

@property(nonatomic, retain) NSMutableArray *navBarColour;

Also, change the compiler to Clang and the error messages will be more clear, if you like.

0

精彩评论

暂无评论...
验证码 换一张
取 消