Cocoa绑定中的循环依赖关系

Cocoa绑定中的循环依赖关系,第1张

概述这是我的头脑…… 简化版本:我有两个文本字段 – 字段A和字段B.字段B可以从字段A派生,类似字段B可以从字段A派生. (还有几个其他字段与A或B组合产生多个TextLabels的数据) 我想要做的是:当用户更改字段A时,字段B更新,反之亦然. 所以我创建了两个方法,将A到B和B做到A.并定义了依赖关系: + (NSSet *)keyPathsForValuesAffectingValueForK 这是我的头脑……

简化版本:我有两个文本字段 – 字段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绑定中的循环依赖关系所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1071705.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存