从其他类访问NSMutableArray

时间:2011-03-09 01:00:05

标签: iphone objective-c xcode nsmutablearray

我有一个类,其中形成了一个NSMutableArray对象,如下所示:

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

然后我有另一个类,它正确地添加了第一个类,但它不允许我从第一个类访问NSMutableArray。这行代码:

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

返回:

预期':'之前'。'令牌

可是:

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

可以在原班上学。

我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

点符号在c ++或java的目标c中的使用方式不同。在objective-c中,它是访问属性的简写。您需要首先定义一个objective-c属性,如下所示:

<。>在.h文件中(INSIDE接口标记)

@property (nonatomic, retain) NSMutableArray *navBarColor;
<。>在.m文件中(在实现标记内)

@synthesize navBarColor;

只有这样才能使用点符号访问数组。

答案 1 :(得分:1)

(实际上,futureelite7&amp; Radek S并不严格正确,因为你不需要@property声明来使用点表示法。如果有一个名为navBarColour的getter方法,那么点符号也适用于此。但这是另一个问题。)

包含navBarColour的代码必须显示属性NSLog的声明。是的,请发布您的头文件,如果您说添加的@property声明也无法编译,那么您有一些奇怪的事情发生。确保你的另一个类'.m包含那个标题,并且HandlingPalettes的类不仅仅用前向声明声明(@class Blah;)声明。

但是,HandlingPalettes是一个类还是一个实例?!?按照惯例以国会大厦字母开头的标识符暗示它是一个类名,所以这是可疑的。如果它是一个类名,那肯定不是你想要的。

(关于使用不带@property的点表示法,如果HandlingPalettes确实是一个类,那么如果你有类方法+(NSMutableArray*)navBarColour那么它编译。)

答案 2 :(得分:0)

您必须将property添加到包含该数组的对象并合成它:

@property(nonatomic, retain) NSMutableArray *navBarColour;

此外,将编译器更改为Clang,如果您愿意,错误消息将更加清晰。