我有两个协议BaseDAO和ICategoryDAO。 ICategoryDAO采用BaseDao。类别类别采用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(ICategoryDao) name]
。
我使用 ARC ,它在非ARC项目上运行正常。
我在互联网上找不到任何解决方案,所以最后我在这里。我怎么能解决这个问题,我在这里做错了什么。
这是协议和类的结构;
BaseDao
#import <Foundation/Foundation.h>
@protocol BaseDao <NSObject>
ICategoryDAO
#import <Foundation/Foundation.h>
#import "BaseDao.h"
@protocol ICategoryDao <BaseDao>
CategoryDAO
#import <Foundation/Foundation.h>
#import "ICategoryDao.h"
@interface CategoryDao : NSObject <ICategoryDao>
ServiceRepo
#import <Foundation/Foundation.h>
@interface ServiceRepository : NSObject
ServiceRepo.m
#import "ServiceRepository.h"
#import "CategoryDao.h"
#import "BaseDao.h"
@implementation ServiceRepository
答案 0 :(得分:1)
请尝试以下可能对您有帮助的代码。
[self.dict setValue:[CategoryDao description] forKey:[NSString stringWithFormat:@"%s",NSStringFromProtocol(@protocol(ICategoryDao))];
<强> NSProtocolFromString 强> 返回具有给定名称的协议。
Protocol *NSProtocolFromString (
NSString *namestr
);
<强>参数强>
nameStr的 协议的名称。
返回值
由namestr命名的协议对象,如果当前未加载该名称的协议,则为nil。如果namestr为nil,则返回nil。