覆盖协议中的属性以使其可变

时间:2013-09-30 19:26:49

标签: objective-c properties

我在尝试覆盖协议中的属性以使其变为可变时遇到了一些问题。

我有这个协议:

@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”时,它会打印nil而不是“something”

回答

我想出了答案。最终有效的是:

@interface SuperObject : NSObject <TheProtocol> {
     @protected
     NSString *someString;
}
@end

1 个答案:

答案 0 :(得分:1)

正在发生的事情是,当你在子类中合成时,分配的是不同于超类中的ivar。因此,打印时的值为nil。您可以通过self.someString.

来参考原始的ivar

希望有所帮助。