iphone - 公共财产没有显示

时间:2010-09-22 01:34:30

标签: iphone

我有一个基于UIImageView的类(让我们称之为classA),它使用了一个classB,并被声明为......

@interface classA : UIImageView  {
    @public classB *mylabel;
}

@property (nonatomic, retain) classB *mylabel;


... @synthesize myLabel was put on its .m

B类被宣布为

@interface classB : UILabel  {
    @public UILabel *myCustomlabel;
}

@property (nonatomic, retain) classB *myCustomlabel;


... @synthesize myCustomlabel was put on its .m

现在我在主要代码上。我创建了一个这样的对象

classA *myObject = [[classA alloc] init];
myObject.myLabel.myCustomLabel.text = @"Hi there";
// this last line fails. It says there's not myCustomLabel structure on myLabel!!!

如果一切都公开,为什么会发生这种情况?

谢谢

2 个答案:

答案 0 :(得分:1)

我不确定是否是拼写错误,但代码中的“l”和“L”之间有错误。这可能会造成你的问题,因为你在“l”和“L”之间陷入困境

@public classB *mylabel;  // small "l"

@property (nonatomic, retain) classB *mylabel; // small "l"


... @synthesize myLabel was put on its .m  // big "L"






@interface classB : UILabel  {
    @public UILabel *myCustomlabel; // small "l"
}

@property (nonatomic, retain) classB *myCustomlabel;  // small "l"


... @synthesize myCustomlabel was put on its .m  // small "l"

所以,我想,对于你的代码,当你调用myObject.myLabel时,它使用@property和@synthesize的get,然后是下一个myCustomLabel,它找不到任何(变量,属性+合成) )就这样抱怨

通常,如果您已经声明了@property + @synthesize,那么您不需要也不应该使用公共变量。 @property已经生成了公共getter和setter方法

答案 1 :(得分:1)

我猜您的代码中存在一些拼写错误。

@interface classB:UILabel {     @public UILabel * myCustomlabel; }

@property(nonatomic,retain)classB * myCustomlabel; //类型应该是UILabel而不是ClassB

classA * myObject = [[classA alloc] init]; myObject.myLabel.myCustomLabel.text = @“你好”; // myLable L应该是小的

ClassA.h和classB.h应该包含在您访问变量的代码中。