Когда я скомпилирую код ниже, строка id copiedData = [_localData copy];
приводит к ошибке компилятора «нет известного метода экземпляра для selector« copy ».» Учитывая, что _localData
имеет тип id<IGTestClassData>
и данный IGTestClassData
соответствует как NSCopying
, так и NSObject
Почему у него нет метода copy
?неизвестный метод экземпляра для селектора «копировать» по протоколу, соответствующему NSCopying и NSObject
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
Протоколы не «соответствуют». У вас должен быть класс объекта. –
Протоколы соответствуют другим протоколам. Нет проблем. –