1

目前,我正在开发一个使用委托的 iOS 应用程序,并实现了类似的东西:

@protocol Hello <NSObject>

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


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

当一些特定的通知发生时,它会调用该sendData方法,它会update调用delegate.

一切正常。在字典中,我需要为一些特殊的代表传递特定的值。所以我正在导入像这样的标题:

#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 回答