如何通过 NSArrayController 获得模型更改的通知?

2023-11-25

我有一个NSView绑定到的子类arrangedObjects of an NSArrayController。当数组插入或删除项目时,视图会收到通知。如果数组中存储的模型的属性发生更改,如何通知它?

我是否需要将我的视图作为观察者添加到添加到数组中的每个项目的每个(相关)属性?

当一个项目被添加到数组或从数组中删除时,我会通过以下方式收到通知observeValueForKeyPath:ofObject:change:context: in my NSView子类。我没有收到有关数组中存储的模型更改的通知,但每次收到插入通知时,我都可以将视图作为观察者添加到新项目的属性中。这是最好的方法吗?

我推翻了addObserver对于模型类,以便我可以看到发生了什么并注意到NSTableView列绑定到arrangedObjects将自己作为观察者添加到适当的属性中。这可以自动发生还是我可以手动设置观察?


非常感谢 dreamlax,但我认为我在解释我的问题方面做得不够好。我的模型类是可观察的并产生了正确的通知,但如果不直接观察数组中的每个项目,我无法弄清楚如何观察它们。

我认为关键路径的文档可以改进,因为我找不到任何可以解释我需要进行的非常简单的更改的内容。有一些关于数组魔术键路径的好信息,但没有简单的“这些是常见的东西”文档。

反正。之前在我的NSView子类我有以下内容:

- (void) bind:(NSString *)binding toObject:(id)observable withKeyPath:(NSString *)keyPath options:(NSDictionary *)options
{
  if ([binding isEqualToString:@"observedObjects"]) {
    [observable addObserver:self forKeyPath:@"arrangedObjects" options:0 context:nil];
  } else {
    [super bind:binding toObject:observable withKeyPath:keyPath options:options];
  }
}

获取模型更改的通知NSArrayController's arrangedObjects我需要补充的是观察arrangedObjects.name(为了name我的模型的财产)。于是上面的代码就变成了:

- (void) bind:(NSString *)binding toObject:(id)observable withKeyPath:(NSString *)keyPath options:(NSDictionary *)options
{
  if ([binding isEqualToString:@"observedObjects"]) {
    [observable addObserver:self forKeyPath:@"arrangedObjects" options:0 context:nil];
    [observable addObserver:self forKeyPath:@"arrangedObjects.name" options:0 context:nil];
  } else {
    [super bind:binding toObject:observable withKeyPath:keyPath options:options];
  }
}

就是这样!现在如果有任何对象arrangedObjects得到它的name更改后我会收到通知。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 NSArrayController 获得模型更改的通知? 的相关文章

随机推荐

  • gitlab 中的奇怪错误:致命:协议错误:行长度字符错误:Depl

    在我的一台服务器上 当我尝试在 gitlab 上 pull ls remote 新建的存储库时 出现以下错误 git ls remote email protected mas vem dinnerdelivery git fatal pr
  • 为 JPanel 添加鼠标监听器

    今天我遇到一个问题 我的程序制作了一个 8x8 网格 并在单击时显示坐标JButton 但我拒绝使用JButton我需要去JPanel 但是我的addMouseListener不工作 所以我不知道如何才能修复我从 4 小时开始搜索的问题 p
  • 在 PHP 中创建不带括号的函数,例如“echo”

    我想知道是否有任何在 PHP 中编写函数的好方法 这样它们就不需要在参数周围使用 Example function sayThis str echo str sayThis hi 谢谢 马特 穆勒 根本没有 echo 更像是一个运算符而不是
  • Wordpress:为用户创建新的 usermeta 字段

    如何创建带有下拉选择值的新用户元字段 我想为所有用户创建一个条件语句 并具有我想要的新自定义字段的特定值 例如 新字段为 Approved 下拉值为 是和否 条件语句将识别 已批准 字段值为 是 的所有用户 然后它会发布一个代码 我正在使用
  • 让 VS2015 验证 C# 早期语法以保持与 VS2013 兼容的方法

    我遇到的一个具体问题是 VS2015 允许您使用更新的 C 语法 例如public string MyProperty gt myProperty 当针对 NET 4 0 框架项目 然后其他人在 VS2013 中打开该项目时 会出现编译器错
  • 如何转义 R 中的反斜杠? [复制]

    这个问题在这里已经有答案了 我正在 R 中工作 并且在逃避反斜杠时遇到麻烦 我正在使用图书馆stringr install packages stringr repos http cran us r project org library
  • NaN 上的宇宙飞船运算符

    在进行太空船比较操作时 C 如何处理浮点 NaN 我们知道通常的比较总是返回 false 那么 NaN 会如何改变呢 std numeric limits
  • iOS 6 应用程序 - 如何处理 iPhone 5 屏幕尺寸? [复制]

    这个问题在这里已经有答案了 可能的重复 如何开发或迁移适用于 iPhone 5 屏幕分辨率的应用程序 我只是想知道我们应该如何应对 iPhone 5 更大的屏幕尺寸 由于它的高度像素更多 像 GCRectMake 这样使用坐标的东西 并且只
  • 杀死java中的无限循环

    我正在使用第三方库来处理大量数据集 该过程偶尔会进入无限循环 或被阻塞 不知道为什么并且无法进入代码 我想在设定的时间后杀死它并继续下一个案例 一个简单的例子是 for Object data dataList Object result
  • 使用父模型获取填充嵌套集合

    我有以下带有嵌套集合的模型 var Mdl Backbone Model extend initialize function collection this col1 new NestedCollection 我想在一个请求中发送模型和集
  • 如何触发 JavaScript 事件点击

    我的页面中有一个超链接 我正在尝试自动点击超链接以进行测试 有什么方法可以使用 JavaScript 模拟超链接的 50 次点击吗 a href target blank MSDN a 我正在寻找来自 JavaScript 的 onClic
  • QuickCheckAll 始终返回“True”

    我正在尝试使用 QuickCheck 以下另一个答案 我这样测试 LANGUAGE TemplateHaskell import Test QuickCheck import Test QuickCheck All last a gt a
  • 继承模板方法

    我有一个类似于以下内容的课程 class SomeClass public template
  • bigmemory 和朋友的文件备份示例

    我有兴趣探索 R 如何处理内存不足的数据 我找到了bigmemory包裹和朋友 bigtabulate and biganalytics 但希望有人能给我指出一个使用这些包的文件支持的示例 任何其他内存不足的提示也将不胜感激 查理 只需发送
  • 在 R 中读取巨大的 json 文件,出现问题

    我正在尝试使用 R 读取非常大的 json 文件 并且我正在将 RJSON 库与此推荐一起使用json data lt fromJSON paste readLines myfile json collapse 问题是我收到此错误消息 Er
  • 编辑替代方案

    我有一大堆查询并使用levenshtein来计算拼写错误 现在levenshtein导致mysql占用完整的CPU时间 我的查询是 UNION 语句中的全文搜索 levenshtein sql1 是我当前的查询 sql2 只是全文搜索 速度
  • 如何将 flash (.swf) 文件嵌入到 asp.net 中?

    如何将 flash swf 文件显示到 asp net 中 从 YouTube 得到这个
  • Windows 8 的 WebClient 替代方案?

    I use WebClient获取 Windows Phone 8 和 Android 的 Yahoo 数据 HttpClient 使用 WebClient 我可以做 WebClient client new WebClient clien
  • 如何更新/重命名载波上传的文件?

    我不知道如何更新 重命名在 Rails 3 2 6 中使用 Carrierwave mongoid 上传 管理的文件 我想重命名数据库和文件系统中的文件 类似这样的事情也许 def rename id new name f Uploaded
  • 如何通过 NSArrayController 获得模型更改的通知?

    我有一个NSView绑定到的子类arrangedObjects of an NSArrayController 当数组插入或删除项目时 视图会收到通知 如果数组中存储的模型的属性发生更改 如何通知它 我是否需要将我的视图作为观察者添加到添加