Hai*_*Dog 1 objective-c nsobject nscopying
当我编译下面的代码行id copiedData = [_localData copy];导致编译器错误"没有已知的选择器'副本'的实例方法." 鉴于它_localData是类型id<IGTestClassData>和给定IGTestClassData符合两者NSCopying,NSObject为什么它没有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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
协议NSCopying和协议均未NSObject声明-copy.
NSCopying-copyWithZone:只声明.一种解决方案是打电话[_localData copyWithZone:nil].
即使协议没有,类也会NSObject声明.一种解决方案是将您的ivar声明为类型.-copyNSObjectNSObject<IGTestClassData> *
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |