我有两个协议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。