gpt4 book ai didi

macos - 在 cocoa 绑定(bind)中合并两个属性

转载 作者:行者123 更新时间:2023-12-03 17:50:59 25 4
gpt4 key购买 nike

假设我有一个名为 Person 的核心数据实体,具有属性 firstNamelastName

我想在 tableView 中显示该人的全名,即名字 + 姓氏,只要以典型的 cocoa 绑定(bind)方式更新名字或姓氏,该 View 就会更新。

我需要绑定(bind)什么才能使其工作?我正在考虑绑定(bind)到一个方法,该方法仅返回基于这两个属性的格式化字符串,然后找出某种方法来触发该方法的更新(如果它所依赖的两个属性中的任何一个已更新),但没有更新很确定这会如何/在哪里发生。

最佳答案

您想要创建一个名为 fullNameregister dependent keyPaths 的 getter为了它。

顺便说一下,那里的代码正是您想要的。

- (NSString*) fullName
{
return [NSString stringWithFormat:@"%@ %@",firstName,lastName];
}

+ (NSSet *)keyPathsForValuesAffectingFullName {
return [NSSet setWithObjects:@"lastName", @"firstName", nil];
}

每当更新 firstNamelastName 时,fullName 的 KVO 观察者都会收到值发生更改的通知。其中包括绑定(bind)到 fullName 的项目。

你可以用这个模式做一些非常奇特的事情,like have changes in an object graph trigger recalculation of properties describing the object graph 。这里有一个小技巧,我从子类中调用一个空的 setter 来强制重新计算依赖于父类的多对子 keyPath 的关系。这避免了苹果建议的(也是痛苦的)注册 KVO 观察者的模式。只要您拥有子类中依赖键路径中的代码,您就可以让子类的实例方法简单地调用父类上的依赖属性,该属性会触发对使用子类中依赖键路径的 getter 的调用。因此,在实践中要避免像 Apple 建议的那样,让父类维护一大堆令人痛苦的代码,这些代码注册为每个子类的 KVO 观察者。

关于macos - 在 cocoa 绑定(bind)中合并两个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26541578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com