RonLugge
RonLugge

Reputation: 5174

Why isn't my objective-C child class inheriting the property of it's parent?

In the .h and .m files of my parent class (WebServiceMessage) I have the following lines:

@property(nonatomic, retain) NSMutableData *receivedData;
@synthesize receivedData;

My child class has the following definition:

@interface RegistrationMessage : WebServiceMessage{...}

-(bar)foo;

So in theory, the child class should be able to use receivedData without needing to declare it itself -- it should inherit the existence of that variable from it's parent.

@implementation RegistrationMessage
...
-(bar)foo{
    self.receivedData=[NSMutableData data];//Error:  Property 'receivedData' not found on object of type 'Class'
}

I've checked, and I'm using #import for the parent class in both the .h and the .m files, just to be sure, but the error is still showing up.

Upvotes: 0

Views: 708

Answers (2)

zaph
zaph

Reputation: 112857

Something is missing the the code that you duid not show, the below compiles fine:

@interface WebServiceMessage : NSObject
@property(nonatomic, retain) NSMutableData *receivedData;
@end

@implementation WebServiceMessage
@synthesize receivedData;
@end

@interface RegistrationMessage : WebServiceMessage
-(void)foo;
@end

@implementation RegistrationMessage
-(void)foo {
    self.receivedData = [NSMutableData data];
}
@end

I did have to get rid of the bar return type because it is an unknown type and there was no return statement in method foo.

Upvotes: 1

Chuck
Chuck

Reputation: 237060

Based on the error, it looks like you're omitting an important detail: foo is not an instance method, it's a class method (that is, it's + (void)foo rather than - (void)foo). You can only set properties (or instance variables in general) on instances.

Upvotes: 2

Related Questions