코드 id copiedData = [_localData copy];
아래의 코드를 컴파일하면 "selector 'copy'에 대한 알려진 인스턴스 메서드가 없습니다."라는 오류가 발생합니다. _localData
이 id<IGTestClassData>
이고 IGTestClassData
이 NSCopying
과 NSObject
에 부합한다고 가정하면 copy
방법이없는 이유는 무엇입니까?NSCopying 및 NSObject를 준수하는 프로토콜에서 selector 'copy'에 대한 알려진 인스턴스 메서드가 없습니다.
IGTestClass.h 파일
#import <Foundation/Foundation.h>
@protocol IGTestClassData<NSCopying, NSObject>
@property (nonatomic) NSString* localId;
@end
@interface IGTestClass : NSObject
{
@protected
id<IGTestClassData> _localData;
}
-(void)doTest;
@end
IGTestClass.m 파일
#import "IGTestClass.h"
@implementation IGTestClass
-(instancetype)initWithLocalData:(id<IGTestClassData>)localData
{
self = [super init];
if (self)
{
_localData = localData;
}
return self;
}
-(void)doTest
{
id copiedData = [_localData copy];
}
@end
프로토콜이 "준수"하지 않습니다. 당신은 객체 클래스가 필요합니다. –
프로토콜은 다른 프로토콜을 준수합니다. 거기에 문제 없습니다. –