gpt4 book ai didi

objective-c - 如何使用绑定(bind)将模型通过 Controller 连接到 View ?

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

我的 View 中有一个 NSTextField 。它的值绑定(bind)到我的 Controller 中的 NSNumber *number 。 Controller 只需调用模型(value)即可获取适当的值。

// In the controller
- (NSNumber *)number {
return [NSNumber numberWithFloat:[model value]];
}
- (void)setNumber:(NSNumber *)aNumber {
[model setValue:[aNumber floatValue]];
}

这很好,只有 Controller 不会收到模型更改的通知,因此更改模型中的值不会更新 NSTextField

我能想到的唯一其他选择是让模型通知 Controller ,然后 Controller 通过 Outlet 手动更新 View 。但这绕过了绑定(bind)。

// In the model, after value change
[[NSNotificationCenter defaultCenter] postNotificationName:@"ValueChanged" object:self];

// In the controller, after being notified
- (void)updateView:(NSNotification *)aNotification {
[myTextField setFloatValue:[model value]];
}

是否有更好的、绑定(bind)感知的方式来实现这种通信?

最佳答案

I have an NSTextField in my view. Its value is bound to an NSNumber *number in my controller. The controller simply calls through to the model (value) to get the appropriate value.

为什么这个属性将值包装在 NSNumber 中? KVC 将为您转换原始值(例如 float)和对象。

This is fine, only the controller is not notified of model changes and thus, changing the value in the model does not update the NSTextField.

模型更改在这里无关紧要, Controller 不需要知道模型属性更改的值,除非 Controller 正在观察该属性 - 在这种情况下, Controller 收到这些更改的通知,因为您正在使用模型的属性访问器。

问题是您没有通过模型绑定(bind)文本字段 - 您而是将其绑定(bind)到 Controller 上的假属性。

因此,假设 Controller 已公开模型对象的属性,只需使用键路径 model.value 将文本字段绑定(bind)到 Controller 即可。

关于objective-c - 如何使用绑定(bind)将模型通过 Controller 连接到 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2462452/

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