1

BaseDAO と ICategoryDAO の 2 つのプロトコルがあります。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' をポップすることです。たとえば、メッセージはこの呼び出しの前方宣言です -> [@protocol(ICategoryDao) name]ARCを使用していますが、ARC 以外のプロジェクトでも問題なく動作します。インターネットで解決策が見つからなかったので、ついにここに来ました。この問題を解決するにはどうすればよいですか、ここで何か間違ったことをしていますか?

これはプロトコルとクラスの構造です。

BaseDao

#import <Foundation/Foundation.h>

@protocol BaseDao <NSObject>

ICategoryDAO

#import <Foundation/Foundation.h>
#import "BaseDao.h"

@protocol ICategoryDao <BaseDao>

カテゴリーDAO

#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
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 に答える