這是做我的頭......循環依賴
簡體版:我有兩個文本字段 - 字段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。