好的,我会回应自己:)我的解决方案是Apurv解决方案和单元测试的混合。
这:
对于MyClass
每个观测到的属性来定义:
static NSString* MyClassPropertyNameNumber = @"number";
在- (void)observeValueForKeyPath:(NSString *)keyPath ...
实施使用仅定义NSString的。
- (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);
}
}
如果您要更改属性名称,并且不更新定义的属性名称,它将失败。
我希望这将是有帮助的人:)
你想重构什么?我甚至没有看到实际的代码能够做些什么。 – 2013-01-16 12:27:23
对不起,我刚刚更新我的意思是重命名属性和更新观察keyPath名称 –