这是做我的头......循环依赖
简体版:我有两个文本字段 - 字段A和字段B字段B可以从领域的衍生和类似的字段B可从现场A.衍生
(还有其他的一些领域,在与多个TextLabels A或B生成数据组合)
我想要做的是:当用户改变字段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
语句,它就可以工作(但只有一种方法,只要A发生更改,B就会更新)。当第二个if
被定义时,它只是炸弹出来,因为(我认为)它看到A更新如此并更新B,然后因为B被更新,再次更新A等,等等......
什么是实现这种循环依赖的最佳方式?是时候开始阅读关于ValueTransformers?
PS。我是一个可可新手,所以请原谅,不要冲太硬,如果这是一个很琐碎的问题...
编辑:
我可能需要澄清几点:
calculatedFieldA
接受B值并返回A,也更新(通过setter方法)valueOfFieldA
。 同样calculatedFieldB
接受A值并返回B,也更新(通过setter方法)valueOfFieldB
。
这是狮子,Xcode 4.1。