Iphone 实例消息的接收方类型()是ARC中的前向声明问题

Iphone 实例消息的接收方类型()是ARC中的前向声明问题,iphone,objective-c,ios,ipad,automatic-ref-counting,Iphone,Objective C,Ios,Ipad,Automatic Ref Counting,我有两个协议BaseDAO和ICategoryDAO。ICategoryDAO采用BaseDao。类类别DAO采用ICategoryDao 下面的代码是serviceRepo类(NSObject的子类)的初始化器方法。在这里,我执行类型检查等 - (id)init { self = [super init]; if (self) { self.dict = [NSMutableDictionary new]; [

我有两个协议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(ICategoryDao)name]
。 我使用的是ARC,它在非ARC项目上运行良好。 我在互联网上找不到任何解决方案,所以我终于来了。我如何解决这个问题,我在这里做错了什么吗

这是协议和类的结构

BaseDao

#import <Foundation/Foundation.h>

@protocol BaseDao <NSObject>
#import <Foundation/Foundation.h>

@interface ServiceRepository : NSObject

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

[self.dict setValue:[CategoryDao description] forKey:[NSString stringWithFormat:@"%s",NSStringFromProtocol(@protocol(ICategoryDao))];
NSProtocolFromString 返回具有给定名称的协议

Protocol *NSProtocolFromString (
   NSString *namestr
);
参数

namestr 协议的名称

返回值


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

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

[self.dict setValue:[CategoryDao description] forKey:[NSString stringWithFormat:@"%s",NSStringFromProtocol(@protocol(ICategoryDao))];
NSProtocolFromString 返回具有给定名称的协议

Protocol *NSProtocolFromString (
   NSString *namestr
);
参数

namestr 协议的名称

返回值


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

是否导入了文件“MockCategoryDao”通常是这样的错误,即需要导入.h文件。因此,您可以尝试直接在SeviceRepo.m中导入ICategoryDao.h。也许会有帮助。出于好奇,我从未见过像[@protocol(ICategoryDao)name]这样的东西。@protocol()在这里做什么?[@protocol(ICategoryDao)name]name是ICategoryDao协议的方法,对吗?我只想将协议的名称作为密钥存储在字典中@潘迪:不,不是。name方法返回用于唯一标识接收器的nsstring对象。是否有其他方法,我可以使用将协议名称作为密钥存储在dict中。是否导入文件“MockCategoryDao”通常是这样的错误,即需要导入.h文件。因此,您可以尝试直接在SeviceRepo.m中导入ICategoryDao.h。也许会有帮助。出于好奇,我从未见过像[@protocol(ICategoryDao)name]这样的东西。@protocol()在这里做什么?[@protocol(ICategoryDao)name]name是ICategoryDao协议的方法,对吗?我只想将协议的名称作为密钥存储在字典中@潘迪:不,不是。name方法返回用于唯一标识接收器的nsstring对象。有没有其他方法,我可以用它把协议的名称作为密钥存储在dict中。。方法是正确的,但方法是NSStringFromProtocol(protocol)“NSStringFromProtocol(@protocol(ICategoryDao))”。它只返回我想要的字符串对象。我假设您有名称协议方法,请也向上投票。很高兴帮助你。哇,你太棒了:)。。方法是正确的,但方法是NSStringFromProtocol(protocol)“NSStringFromProtocol(@protocol(ICategoryDao))”。它只返回我想要的字符串对象。我假设您有名称协议方法,请也向上投票。很高兴帮助你。
Protocol *NSProtocolFromString (
   NSString *namestr
);