4

私は自分のアプリの 1 つを「共有 appdelegate」プロセスから遠ざけることに取り組んできました。やりたいことのためにプロトコルメソッドをセットアップしようとしましたが、運がありません。私の質問は、単一のビューコントローラーがデリゲート要求を複数のクラスに送信することさえできますか? 私が見つけたものから、あなたができるようには見えません。それがmvcを使用したデリゲートとプロトコルの要点だと思ったので、これは意味がありません。明確にするために、単一のビューコントローラーを他の複数のビューコントローラーのデリゲートとして機能させることができることを知っています。しかし、それは私が求めていることではありません。簡単な例として、りんごのフリップ ユーティリティ テンプレートがあるとします。「完了」ボタンは、デリゲート メソッドを mainvc に呼び出して破棄するだけです。

@interface NewClass : NSObject <TheOtherDelegate>

デリゲートメソッドがありました...

- (void)doSomething
{
NSLog(@"The Delegate did something...");
}

flipsideviewcontroller にデリゲート メソッドを呼び出したいボタンを配置できますが、それを却下する mainviewcontroller のデリゲート メソッドへの「完了」ボタン呼び出しを保持できますか?

そうは言っても、それが機能するかどうかを確認するためだけに、簡単なプロジェクトをまとめました。最初にデリゲートになりたいクラスをインスタンス化する必要があるという「答え」に出くわしました...

NewClass *myDelegate = [NewClass alloc] init]
[fillInMethodHere setDelegate:myDelegate];

言うまでもなく機能しないため、正解チェックが行われた理由はわかりません。私が欠けているものはありますか?どこかに「デリゲート」接続があるかどうかを確認するためにibを精査しましたが、何も見つかりませんでした。

ちなみに、私は自分の作業中のプロジェクトで作業していたので、を削除し#importて追加することについての提案を読みました@class。繰り返しますが、それはあらゆる種類のものを壊しました。奇妙なことは、それを行う前に、私がこれまでに持っていたものがうまく機能し、うまく構築されていたことです。@class新しいものを削除してコメントを外したとき#import。xcode は突然、「... のプロトコル減速が見つかりません」というエラーを表示しましたが、数秒早く機能しました。プロトコルコードを削除して、再び機能させるために再度追加する必要があります。非常にスタージ。

任意の助けをいただければ幸いです。ドキュメント、グーグル、スタックなどで読んだすべてのものは、実際のプロジェクトではなく、うまくいくはずです。

4

1 に答える 1

12

「デリゲート」は、派手なオブジェクトではありません。これは、。と呼ばれるタイプidの単純に合成されたプロパティですdelegate。必要に応じて、すべて同じプロトコルに準拠する任意の数のプロパティを設定できます。次に、コールバックを発行する場合は、それらすべてに対処するだけです。

[self.mydelegateA doSomething];
[self.mydelegateB doSomething];

NSMutableArrayオブジェクトを追加してから使用できるプロパティを持つこともできます[self.myMutableArrayOfDelegates makeObjectsPerformSelector:@selector(doSomething)]

最後に、NSNotificationCenter(プッシュ通知と混同しないでください)のルートは常にありますオブジェクト間メッセージングシステムを提供するクラスです。多くのオブジェクトは、他のオブジェクトが送信できるメッセージに登録できます。

詳細については、Appleのドキュメントを参照してください。ここをクリック。

これがOSXのドキュメントであるという事実に関係なく、視覚的に物事を説明するのは非常に優れています。ここをクリックしてください。

デリゲートプロパティの名前を変更するだけの例を次に示します。ここをクリックしてください。

そして、別のプロトコルと2番目のデリゲートを追加する例を次に示します。ここをクリックしてください。

最後に、前の2つに基づいており、同じプロトコルに準拠する3番目のデリゲートがある例を次に示します。ここをクリックしてください。

于 2012-04-28T03:42:46.110 に答える