1

現在、私はデリゲートを使用しているiOSアプリケーションに取り組んでおり、次のようなものを実装しています:

@protocol Hello <NSObject>

@required
- (void)update:(NSDictionary *)data;
@end


@interface NotificationHandler : NSObject
{
    id <Hello>delegate;
}
- (void)sendData;
@end

特定の通知が発生すると、メソッドが呼び出され、のメソッドがsendData呼び出されます。updatedelegate

すべてが正常に機能しています。ディクショナリでは、いくつかの特別なデリゲートに特定の値を渡す必要があります。だから私は次のようなヘッダーをインポートしています:

#import "Special1.h"
#import "Special2.h"

- (void)sendData
{
   if([_delegate isKindOfClass:[Special1 class]])
   {
      //special class 1
      NSDictionary *dict = //initialize with parameters and values
      [(Special1 *)_delegate update:dict];
   }
   else if([_delegate isKindOfClass:[Special2 class]])
   {
      //special class 2
       NSDictionary *dict = //initialize with parameters and values
      [(Special2 *)_delegate update:dict];
   }
}

ここでの問題は、ここにすべての特別なクラスをインポートする必要があることです。クラスをインポートせずにこれを行う方法はありますか?

4

1 に答える 1

1

次のようなNSClassFromStringを使用したソリューションを見つけました。

- (void)sendData
{
   if([_delegate isKindOfClass:NSClassFromString(@"Special1")])
   {
      //special class 1
      NSDictionary *dict = //initialize with parameters and values
      [_delegate performSelector:@selector(update:) withObject:dict];
   }
   else if([_delegate isKindOfClass:NSClassFromString(@"Special2")])
   {
      //special class 2
      NSDictionary *dict = //initialize with parameters and values
      [_delegate performSelector:@selector(update:) withObject:dict];
   }
}
于 2013-06-21T13:34:11.783 に答える