プロトコルのプロパティをオーバーライドして変更可能にしようとすると、いくつかの問題が発生します。
私はこのプロトコルを持っています:
@protocol TheProtocol
@property (nonatomic, readonly) NSString *someString;
@end
そして、このクラス:
@interface SuperObject : NSObject <TheProtocol>
@end
次のように変数を合成します。
@implementation SuperObject
@synthesize someString;
-(id)init {
if(self=[super init]) {
someString = [aString copy];
}
return self;
}
@end
したがって、内部的に書き込むことができます
次に、サブクラスがあります。
@interface SubObject : SuperObject
@end
@implementation SubObject
@synthesize someString;
- (id)init {
if(self=[super init]) {
NSLog(@"Some string is %@",someString");
someString = [bString copy];
}
return self;
}
私のサブクラスでは、someString に代入しようとしてもうまくいきません。サブクラスでsomeStringも合成しようとしましたが、それを変更しようとする前に、「someString」を出力すると、「something」ではなくnilが出力されます
回答済み
答えがわかった。最終的にうまくいったのはこれです:
@interface SuperObject : NSObject <TheProtocol> {
@protected
NSString *someString;
}
@end