2011-08-24 229 views
4

这是做我的头......循环依赖

简体版:我有两个文本字段 - 字段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; 
} 

calculatedFieldAcalculatedFieldB是做转换和valueOfFieldAvalueOfFieldB的方法的NSString的是绑定到两个文本字段。

如果我删除第二个if语句,它就可以工作(但只有一种方法,只要A发生更改,B就会更新)。当第二个if被定义时,它只是炸弹出来,因为(我认为)它看到A更新如此并更新B,然后因为B被更新,再次更新A等,等等......

什么是实现这种循环依赖的最佳方式?是时候开始阅读关于ValueTransformers

PS。我是一个可可新手,所以请原谅,不要冲太硬,如果这是一个很琐碎的问题...

编辑:

我可能需要澄清几点:

calculatedFieldA接受B值并返回A,也更新(通过setter方法)valueOfFieldA。 同样calculatedFieldB接受A值并返回B,也更新(通过setter方法)valueOfFieldB

这是狮子,Xcode 4.1。

回答

1

价值变压器几乎肯定是这里的正确答案。不要存储“A”和“B”。只需存储其中一个。价值变换器正是显示和接受另一个输入的方式。