1. ホーム
  2. objective-c

[解決済み] Objective-CのReadonlyプロパティ?

2023-01-18 17:31:21

質問

インターフェースの中で、読み取り専用のプロパティをこのように宣言しました。

 @property (readonly, nonatomic, copy) NSString* eventDomain;

プロパティを勘違いしているのかもしれませんが、宣言するときに readonly と宣言すると、実装の内部で生成されたセッターを使うことができます( .m ) ファイル内で使用することができますが、外部エンティティは値を変更することができません。 このSOの質問 は、それが起こるべきであることを述べています。それは私が追い求めている動作です。しかし、標準的なセッターやドット構文を使って eventDomain を init メソッド内に設定しようとすると、それは unrecognized selector sent to instance. というエラーが発生します。もちろん、私は @synthesize をプロパティの中に入れています。こんな風に使おうとしています。

 // inside one of my init methods
 [self setEventDomain:@"someString"]; // unrecognized selector sent to instance error

というのは、私が誤解しているのは readonly の宣言を誤解しているのでしょうか?それとも、何か他のことが起こっているのでしょうか?

どのように解決するのですか?

セッターも必要であることをコンパイラに伝える必要があります。一般的な方法は、それを クラス拡張 に記述することです。

@interface YourClass ()

@property (nonatomic, copy) NSString* eventDomain;

@end