好的,我会回答自己:)我的解决方案是 Apurv 解决方案和单元测试的混合。
这里是:
1对于MyClass
定义中的每个观察到的属性:
static NSString* MyClassPropertyNameNumber = @"number";
2在- (void)observeValueForKeyPath:(NSString *)keyPath ...
实现中仅使用定义的 NSStrings。
- (void)observeValueForKeyPath:(NSString *)keyPath ...
{
if ([keyPath isEqualToString:MyClassPropertyNameNumber]) ...
}
3编写单元测试,它将检查 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);
}
}
如果您更改属性名称并且不更新定义的属性名称,它将失败。
我希望它对某人有帮助:)