2011-02-13 7 views
1

私はサブクラス化されることを知っているスーパークラスを作成しようとしています(私ははオブジェクトを抽象化しますが、Creating an abstract class in Objective-Cによるとできません)。スーパークラスはメソッド-initWithArguments:を定義します。このメソッドはサブクラスによってオーバーライドされるため、エラーをスローします。スーパークラスもそうのような、実行時に返すためにどのサブクラスを決定する静的初期化子があります具体的なサブクラスのメソッドが正しく呼び出されていません

Class subClass = NSClassFromString(classNameFromFile); 
NSArray *argumentArray = [ArgumentsFromFile componentsSeparatedByString:@","]; 
SuperClass *returnObject = [[subClass alloc] initWithArguments:argumentArray]; 
if([returnObject isKindOfClass:[SuperClass class]]){ 
    return returnObject; 
} 

私は、私はこのコードを実行すると上書き-initWithArguments:方法は、しかし、3行目でここに呼ばれることを期待しますスーパークラスの-initWithArguments:が呼び出されます。私は、オーバーライドされたメソッドのシグネチャが正しいことを確認してダブルチェックし、サブクラスがサブクラスを正しく表していることを確認しました。なんてこったい?これは私がスーパークラスの中で-initWithArguments:と呼んでいるという事実と関係がありますか?助けを前にありがとう。私はみんなを愛しています。

答えて

3

サブクラスが実際に-initWithArguments:をオーバーライドしていないか、サブクラスが正しく読み込まれていません。したがって:

  1. サブクラスの-initWithArguments:にブレークポイントを設定します。
  2. サブクラスのメソッド名にタイプミスがないことを確認してください。たとえば、サブクラスに-initwithArumgnetns:がある場合は、スーパークラスの-initWithArguments:が呼び出されます。
  3. -allocWithZone:など何らかの形で上書きしていますか?もしそうなら、あなたのバグがそこにあると私は100万ドルを賭けるでしょう。

運が良かった!

+0

私は-allocWithZoneをオーバーライドしています。無関係なシングルトンで、プログラムの反対側に向かいます。それはそうだろうか?私はチェックし、ダブルメソッドの署名が正しいことを確認し、私はデバッグして、私は適切に私のサブクラスをロードしていることを確認しました。私はすでに両方の実装にブレークポイントを設定していますが、コンパイラは常に間違ったものを選択します。 – AnthonyJoeseph

+1

私はそれを修正しました!私はかわいいと思う。ファイルデータに問題がありました。しかし、とにかく、ありがとう。私はあなたにゲームの前にあなたを置くいくつかの精神的な練習をあなたに願っています。 – AnthonyJoeseph

関連する問題