title: Protocol inheritance in Objective C
body: <p>I've got a project which has in it a protocol, a class implementing that protocol, and a subclass of the implementation class.  This is our production application.  </p>
  
  <pre><code>@protocol ProductionProtocol&lt;NSObject&gt;
  @property (nonatomic, retain) NSString *role;
  @end
  
  @interface BaseProduction : NSObject&lt;ProductionProtocol&gt;
  NSString *role;
  @end
  
  @implementation BaseProduction
  @synthesize role;
  @end
  
  @interface Production : BaseProduction
  @end
  
  @implementation Production
  @end
  </code></pre>
  
  <p>I've also got a proof of concept (POC) application, which is implemented as a separate project that includes the production application.  In the POC application, I have a protocol that extends the production protocol, and a class that extends the production class.  </p>
  
  <pre><code>@protocol POCProtocol&lt;ProductionProtocol&gt;
  -(void)cancel;
  @end
  
  @interface POC : Production&lt;POCProtocol&gt;
  @end
  
  @implementation POC
  -(void)cancel{...}
  @end
  </code></pre>
  
  <p>Notice that in the ProductionProtocol, I've got a role NSString which is declared, and implemented in the BaseProduction interface/class.  in the POC, I've got a method 'cancel' which is declared in the protocol, but not in the interface/class.</p>
  
  <p>So here's my question: with my class structure set up like this, I get this warning:</p>
  
  <pre><code>Property 'role' requires method '-role' to be defined - use @synthesize, @dynamic or provide a method implementation
  </code></pre>
  
  <p>I don't understand why I'm getting this warning.  Since the synthesized properties are in the base class, they should be available to the POC class - and a quick test seems to confirm that they are.  So what am I doing wrong here?  </p>