简化版本:我有两个文本字段 – 字段A和字段B.字段B可以从字段A派生,类似字段B可以从字段A派生.
(还有几个其他字段与A或B组合产生多个TextLabels的数据)
我想要做的是:当用户更改字段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;}
其中calculateFIEldA和calculatedFIEldB是进行转换的方法,valueOfFIEldA和valueOfFIEldB是绑定到两个文本字段的Nsstring.
如果我删除第二个if语句,它可以工作(但只有一种方式,B会在A更改时更新).当定义第二个if时,它只是炸d,因为(我认为)它看到A更新所以去更新B,然后因为B更新,再次更新A等等…
实现这种循环依赖的最佳方法是什么?现在是开始阅读ValueTransformers的时候了吗?
PS.我是一个可可新手,所以请耐心等待,如果这是一个非常微不足道的问题,请不要太努力…
编辑:
我可能需要澄清几点:
calculatedFIEldA接受B值并返回A,也更新(通过setter方法)valueOfFIEldA.
类似地,computedFIEldB接受A值并返回B,也更新(通过setter方法)valueOfFIEldB.
这是在lion上,使用Xcode 4.1.
解决方法 价值变换器几乎肯定是正确的答案.不要存储“A”和“B”.只需存储其中一个.值变换器正是显示和接受另一个输入的方式. 总结以上是内存溢出为你收集整理的Cocoa绑定中的循环依赖关系全部内容,希望文章能够帮你解决Cocoa绑定中的循环依赖关系所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)