1

Objective C には 2 つのクラスがあります。

クラス A : ViewController クラス B : UITableViewController

ストーリーボードにクラス B オブジェクトを追加し、クラス A からのコールバックを使用して呼び出されます。クラス Ah のデリゲートを使用してこの問題を解決しました。

#import "ClassB"

@interface ClassA : ViewController
< ClassBDelegate >
{ 
id<ClassADelegate> _delegateClassA;
}

アムのクラスで:

@implementation ClassA

@synthesize delegateClassB = _delegateClassB;

@end

クラス Bh で

@protocol ClassBDelegate

- (void)helloWorld

@end

@interface ClassB : UITableViewController
{
id<ClassBDelegate> _delegate;
@property (nonatomic, readwrite) id<ClassBDelegate> delegate;
}

クラス Bm では、デリゲートを正しく使用できます。

[_delegate helloWorld];

問題は、A から B クラスへのデリゲートという逆の方法も使用したいということです。B と A の間でインポートを使用すると、循環インポートが行われ、コードをコンパイルできないため、同じ方法を使用して別の方法で問題を解決することはできません。

なにか提案を?

4

2 に答える 2

2

viewController から独立して、すべてのプロトコルを 1 つのファイルに追加できます。例 Protocols.h/m を実行し、問題なくこのファイルをインポートします。

于 2013-01-28T16:00:39.337 に答える
2

クラス A から B および B から A の両方にデリゲートを作成することはできません。これは、デリゲートを作成するには、他のクラスをインポートし、デリゲートを他のクラスに設定する必要があるためです。

シングルトンを使用してこの問題を解決しました

シングルトンを使用すると、通常どおり、外部クラスからメイン クラス (A) への通常のデリゲートを作成できます。シングルトンを静的インターフェイスとして実装すると、メイン クラス (A) からの共有ポインターを使用してシングルトンで関数コールバックを呼び出し、シングルトンから B へのデリゲートを使用できます。

この方法を使用すると、循環ヘッダーの問題を解決できます。これがお役に立てば幸いです。

于 2013-01-29T11:31:29.223 に答える