1

我有两个协议 BaseDAO 和 ICategoryDAO。ICategoryDAO 采用 BaseDao。类 categoryDao 采用 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 总是弹出错误Receiver type 'Protocol' 例如 message is a forward declaration in this call -> [@protocol(ICategoryDao) name]。我正在使用ARC,它在非 ARC 项目上运行良好。我在互联网上找不到任何解决方案,所以最后我在这里。我该如何解决这个问题,我在这里做错了什么。

这是协议和类的结构;

基地道

#import <Foundation/Foundation.h>

@protocol BaseDao <NSObject>

I类别DAO

#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

服务报告.m

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

@implementation ServiceRepository
4

1 回答 1

1

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

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

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

Protocol *NSProtocolFromString (
   NSString *namestr
);

参数

namestr 协议的名称。

返回值

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

于 2012-10-23T07:38:59.033 回答