2011-08-24 179 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」。只需存儲其中一個。價值變換器正是顯示和接受另一個輸入的方式。