リンクで別のプロジェクトで使用できるジェネリッククラスを作成します。
ある時点で、オブジェクトを所有し、クラスに割り当てられて保持されているリスナーのメソッドを呼び出します。
しかし、その呼び出し元が消滅することがあるので、その場合、返信メッセージをアプリケーションデリゲートにルーティングする必要があります。ここでiPhone - ジェネリッククラス内のアプリケーションデリゲートの参照
は(呼び出し側が作成したもので、私のクラスのインスタンスを所有している)私は、発信者のために行う方法です:
私はresponseListenerの代わりにアプリのデリゲートクラスを参照することがどのようにif ([self.responseListener respondsToSelector:@selector(serverAnswered:error:)]) {
// some job to construct the return object
[self.responseListener performSelector:@selector(serverAnswered:error:) withObject:response withObject:nil];
}
呼び出し元はdisapearedですか?
はい、私はアプリケーションデリゲートでカスタムメソッドを呼び出したいと思います。私のクラスはジェネリックであり、異なるプロジェクトに含めることができるので、そのクラスはそれが含まれているプロジェクトに使用されているアプリケーションデリゲートクラスの名前を知らない。クラスをknwoingせずに2番目の呼び出しを書く方法はあるアプリケーションデリゲートの名前。 – Oliver
正しいことは、ライブラリのユーザーにアプリケーションデリゲートにプロトコルを実装するよう要求することです。私は私の答えを更新します。 –
私は同意しますが、特定の呼び出しが汎用オブジェクトにトリガーされたときに発生する、特定のケースでのみ呼び出されるメソッドをアプリケーションに実装させることはできません。ジェネリッククラスで実装されている他のすべてのメソッドについては、それは役に立たない。だから私は、アプリケーションの代理人がそのメソッドを実装しているかどうかを確認し、そうでない場合は、3番目のルートに移動することをお勧めします。 – Oliver