这是我的头脑......
简化版:我有两个文本字段 - 字段A和字段B.字段B可以从字段A派生,类似字段B可以从字段A派生。
(还有几个其他字段与A或B组合产生多个TextLabel的数据)
我想要做的是:当用户更改字段A时,字段B会更新,反之亦然。
所以我创建了两个方法,将A到B和B做到A.并定义了依赖关系,如:
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key
{
NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
if ([key isEqualToString:@"calculatedFieldA"]) {
NSSet *dependentKeys = [NSSet setWithObjects:@"valueOfFieldB", nil];
keyPaths = [keyPaths setByAddingObjectsFromSet:dependentKeys];
}
if ([key isEqualToString:@"calculatedFieldB"]) {
NSSet *dependentKeys = [NSSet setWithObjects:@"valueOfFieldA", nil];
keyPaths = [keyPaths setByAddingObjectsFromSet:dependentKeys];
}
return keyPaths;
}
calculatedFieldA
和calculatedFieldB
是执行转换的方法,valueOfFieldA
和valueOfFieldB
是绑定到两个文本字段的NSString。
如果我删除了第二个if
语句,它可以工作(但只有一种方式,B会在A更改时更新)。当第二个if
被定义时,它只是炸弹,因为(我认为)它看到A更新所以去更新B,然后因为B更新,再次更新A等等...... < / p>
实现此循环依赖的最佳方法是什么?是时候开始阅读ValueTransformers了吗?
PS。我是一个Cocoa新手,所以请耐心等待,如果这是一个非常微不足道的问题,请不要太努力......
修改
我可能需要澄清几点:
calculatedFieldA
接受B值并返回A,也更新(通过setter方法)valueOfFieldA
。
同样地,calculatedFieldB
接受A值并返回B,也更新(通过setter方法)valueOfFieldB
。
这是在Lion上,使用Xcode 4.1。
答案 0 :(得分:1)
价值变形金刚几乎肯定是正确答案。不要存储“A”和“B”。只需存储其中一个。值变换器正是显示和接受另一个输入的方式。