Receiver type()例如消息是ARC中的前向声明问题

时间:2012-10-23 07:12:35

标签: iphone objective-c ios ipad automatic-ref-counting

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

1 个答案:

答案 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。