我有两个协议BaseDAO和ICategoryDAO。 ICategoryDAO采用BaseDao。类类别Dao采用ICategoryDao。

以下代码是serviceRepo类(NSObject的子类)的初始化方法。在这里,我执行类型检查等。

 - (id)init {
        self = [super init];
        if (self) {
            self.dict  = [NSMutableDictionary new];
            [self.dict setValue:[CategoryDao description] forKey:[NSString stringWithFormat:@"%s",[@protocol(ICategoryDao) name]]];
        }
        return self;
    }


问题是Xcode总是弹出错误接收器类型'Protocol',因为实例消息是此调用中的前向声明-> [@protocol(ICategoryDao) name]
我正在使用ARC,在非ARC项目上可以正常工作。
我在互联网上找不到任何解决方案,所以最后我在这里。我该如何解决这个问题?

这是协议和类的结构;

BaseDao

#import <Foundation/Foundation.h>

@protocol BaseDao <NSObject>


分类

#import <Foundation/Foundation.h>
#import "BaseDao.h"

@protocol ICategoryDao <BaseDao>


分类DAO

#import <Foundation/Foundation.h>
#import "ICategoryDao.h"

@interface CategoryDao : NSObject <ICategoryDao>


服务回购

#import <Foundation/Foundation.h>

@interface ServiceRepository : NSObject


服务仓库

#import "ServiceRepository.h"
#import "CategoryDao.h"
#import "BaseDao.h"

@implementation ServiceRepository

最佳答案

请尝试以下可能对您有帮助的代码。

[self.dict setValue:[CategoryDao description] forKey:[NSString stringWithFormat:@"%s",NSStringFromProtocol(@protocol(ICategoryDao))];


NSProtocolFromString
返回具有给定名称的协议。

Protocol *NSProtocolFromString (
   NSString *namestr
);


参量

名称
协议名称。

返回值

以namestr命名的协议对象,如果当前未加载该名称的协议,则为nil。如果namestr为nil,则返回nil。

10-08 06:09