问题
I hit the error (stated in the subject) when trying to run the following code (snippet). The error is pointing to my 3rd and 4th lines of the code below.
id shape[3];
shape[0] = [[Circle alloc]init];
shape[0].fillColor = kRed;
shape[0].shapeBounds = bound0;
Prior to this set of code I had defined the enum and struct for ShapeColor and ShapeBoundary as below
typedef enum
{
kRed,
kBlue,
kGreen,
kPurple
}ShapeColor;
typedef struct
{
int x;
int y;
int width;
int height;
}ShapeBoundary;
Also, I have defined my interface and implementation of a "Circle" class
@interface Circle : NSObject
{
ShapeColor fillColor;
ShapeBoundary shapeBounds;
}
@property ShapeColor fillColor;
@property ShapeBoundary shapeBounds;
@end
@implementation Circle
@synthesize fillColor;
@synthesize shapeBounds;
@end
I used @property and @synthesize to define my getter and setter methods for "fillColor" and 'Shapebounds". Is there something wrong with the way I am using property and synthesize to cause the error in the subject? Or is there anything I am missing out. Any advise on this is greatly appreciated.
Thanks and Regards
Zhen Hoe
回答1:
In order to use dot notation for properties, the class of the variable must be statically typed or cast. That is, your code must declare the class of the object instead of using id. If you used Circle *shape[3];
, or ((Circle*)shape[0]).fillColor
then your errors would go away. When you want your variable to be dynamically typed (using id
), you need use the equivalent methods to get the properties:
id shape[3];
shape[0] = [[Circle alloc] init];
[shape[0] setFillColor:kRed];
[shape[0] setShapeBounds:bound0];
Also make sure you include the header for the Circle class in the file where you are doing this.
来源:https://stackoverflow.com/questions/5534105/objective-c-request-for-member-xxx-in-something-not-a-structure-or-union