私は自分自身に反応します:)私の解決策はApurvソリューションとユニットテストの組み合わせです。
ここでそれは:MyClass
各観察プロパティについて
を定義:- (void)observeValueForKeyPath:(NSString *)keyPath ...
実装用途において
static NSString* MyClassPropertyNameNumber = @"number";
のみ定義NSStringsを。
- (void)observeValueForKeyPath:(NSString *)keyPath ...
{
if ([keyPath isEqualToString:MyClassPropertyNameNumber]) ...
}
MyClassのオブジェクトがsetNumber:
とnumber
セレクタに応答するかどうかをチェックするユニットテストを書きます。
- (void)testMyClass
{
SEL numberGetter = NSSelectorFromString(MyClassPropertyNameNumber);
SEL numberSetter = NSSelectorFromString([NSString stringWithFormat:@"set%@:", MyClassPropertyNameNumber]);
MyClass* testMyClass = [[MyClass alloc] init];
if (![testMyClass respondsToSelector:numberGetter] || ![testMyClass respondsToSelector:numberSetter])
{
STFail(@"%@: %@ property name has changed! Please update your defined property name!", NSStringFromClass([MyClass class]), MyClassPropertyNameNumber);
}
}
プロパティ名を変更して、定義済みのプロパティ名を更新しないと失敗します。
私はそれが誰かのために役立つことを願っています:)
何をリファクタリングしますか?私は何かをする実際のコードを見ていない。 –
申し訳ありませんが、私はプロパティの名前を変更し、観測されたkeyPathの名前を更新することを意味しました –