gpt4 book ai didi

cocoa - 将阵列 Controller 绑定(bind)到 'derived' 属性 - KVO 问题?

转载 作者:行者123 更新时间:2023-12-03 16:39:37 24 4
gpt4 key购买 nike

抱歉,这个标题很笨拙。

想象一个简单的用户界面来显示一个人 child 的名字......

由于我最初只有一个 Person,所以我创建了一个数组 Controller 并将其绑定(bind)到 appDelegate.person1.children - 这工作得很好,就像绑定(bind)一个表列来显示名字一样。

但是,我已经扩展了我的程序,以便在 AppDelegate 中维护一个数组或人员,而不是“person1”。我认为我可以简单地保留 person1 属性,并使用它返回列表中的第一项:

- (Person *)person1{
return [[self people] objectAtIndex:0];
}

我已确认所有内容均已正确创建(在运行时),但我无法让绑定(bind)的表列显示 person1 child 的名字。

与 KVO 有关吗?如何确保表知道当 person 数组更改时,person1 会更改(因此 UI 也会更改)?

谢谢

最佳答案

How do I make sure that the table knows that when the persons array changes, person1 changes (and therefore the UI)?

您的意思是 person1 属性的值依赖persons 属性的值。那么,前者就是所谓的 dependent key .

因此,实现 keyPathsForValuesAffectingPerson1 以返回包含 @"persons" 的集合。

您还需要以可观察的方式更改属性的值。直接与数组对话并不能解决问题;没有人会知道该值已更改。正如 Raj Pawan 已经指出的那样,一种方法是自己明确发送全值 value-will/did-change 通知。

我发现更容易阅读和编写的另一种方法是实现 array accessor methods对于数组属性(在您的情况下为 persons 属性),并专门使用这些访问器来改变数组(在 initdealloc 之外) )。当您调用访问者时,KVO 通知是免费的。这还应该包括任何依赖键。

关于cocoa - 将阵列 Controller 绑定(bind)到 'derived' 属性 - KVO 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2307923/

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