title: OO Objective-C design with XML parsing
body: <p>I need to parse an XML record that represents a QuizQuestion. The "type" attribute tells the type of question. I then need to create an appropriate subclass of QuizQuestion based on the question type. The following code works ([auto]release statements omitted for clarity):</p>
  
  <pre><code>QuizQuestion *question = [[QuizQuestion alloc] initWithXMLString:xml];
  if( [ [question type] isEqualToString:@"multipleChoiceQuestion"] ) {
      [myQuestions addObject:[[MultipleChoiceQuizQuestion alloc] initWithXMLString:xml];
  }
  
  //QuizQuestion.m
  -(id)initWithXMLString:(NSString*)xml {
      self.type = ...// parse "type" attribute from xml
      // parse the rest of the xml
  }
  
  //MultipleChoiceQuizQuestion.m
  -(id)initWithXMLString:(NSString*)xml {
      if( self= [super initWithXMLString:xml] ) {
          // multiple-choice stuff
      }
  }
  </code></pre>
  
  <p>Of course, this means that the XML is parsed twice: once to find out the type of QuizQuestion, and once when the appropriate QuizQuestion is initialized.</p>
  
  <p>To prevent parsing the XML twice, I tried the following approach:</p>
  
  <pre><code>// MultipleChoiceQuizQuestion.m
  -(id)initWithQuizRecord:(QuizQuestion*)record {
      self=record; // record has already parsed the "type" and other parameters
      // multiple-choice stuff
  }
  </code></pre>
  
  <p>However, this fails due to the "self=record" assignment; whenever the MultipleChoiceQuizQuestion tries to call an instance-method, it tries to call the method on the QuizQuestion class instead.</p>
  
  <p>Can someone tell me the correct approach for parsing XML into the appropriate subclass when the parent class needs to be initialized to know which subclass is appropriate?</p>