2009-06-17 17 views
2

は私がURLView Controller ivarを設定するのに最適な場所は何ですか?

- (id)initWithURL:(NSURL *)url 

このクラスは今変数インスタンス

// in the interface 
ViewController *viewController; 
// in the implementation 
[viewController addObject:theObject]; 

を使用して呼び出し元のクラスの配列にオブジェクトを追加して初期化したXMLリーダークラスを持って、私は私のXMLリーダーを初期化しますクラスは、別途ビューコントローラを設定します。

XMLController *xmlController = [[XMLController alloc] 
        initWithURL:url]; 
xmlController.viewController = self; 

私の質問は、私はviewConを設定し、新規のinit関数を作成する必要があるかどうかであります同時にトロルバー。おかげさまで

編集:私のXMLリーダーは、init関数でクラスのダウンロードと解析を開始すると忘れてしまいました。

答えて

2

あなたのinitルーチンがデリゲート/コントローラ呼び出しを引き起こす場合、またはデリゲートを通知できる非同期アクティビティ(潜在的にあなたのダウンロードを含む)を設定する場合は、それをinit関数に含める必要があります。

それ以外の場合は、initWithURLルーチンが返される前に呼び出される可能性のあるxmlController:didStartConnectionなどのデリゲートメッセージが表示されない可能性があります。

また、コントローラー/デリゲートがXMLControllerアクティビティーの必須部分である場合は、それをinitルーチンに組み込む必要があります。

そうです、このケースでは、私はお勧めします:

XMLController *xmlController = [[XMLController alloc] initWithURL:url andController:self]; 
4

これはまったくあなた次第です。両方のスタイルの例をAppleのコード全体で見ることができます。

viewControllerプロパティの値が時間の経過とともに一定であることを前提としない限り、そのままの状態で残しておいてください。

ところで、特定のサブクラスを要求するのではなく、addObject:ロジックをプロトコルにリファクタリングすることが考えられます。何かのように:

-xmlController:didDecodeObject: 

またはあなたのXMLControllerオブジェクトのロジックには意味があります。

関連する問題