问题标签 [cocoa-bindings]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
4754 浏览

cocoa - 使用 addObserver:forKeypath:options:context: init 方法的奇怪问题

根据 Apple 和我看到的大量示例,使用 KVO/KVC 来观察自己是没有问题的。同样根据这些相同的来源,通过在对象的 init 方法中使用 addObserver:forKeypath:options:context: 来设置它不是问题,a la:

不幸的是,由于某种原因,当我在那里执行此操作时,不会调用我的观察者方法。如果我将 addObserver 调用移动到另一个方法,然后在调用方法中调用该方法:

那么一切都很好。这是 NSImageView 的一个子类,所以这里没有任何“awakeFromNib”类型的替代品......我真的在这里摸不着头脑,我敢肯定我错过了一些明显的东西——比如关于事情的规则导致 KVO on self 在 init 方法中不起作用,但我在文档中没有找到任何可以在这里给我任何提示的内容。

我不知道什么?

0 投票
1 回答
439 浏览

cocoa - 访问 NSTableView 中的托管对象

我有一个NSTableView绑定到一个NSArrayController,它绑定到NSManagedObjectContext一个实体。如何以编程方式在表格视图中当前选择的对象上设置属性?我尝试直接通过

[[[documentsController arrangedObjects] objectAtIndex:[tableView selectedRow]] setObject:[NSDate date] forKey:@"dateProperty"]

但这给了我一个例外:

-[_NSControllerArrayProxy selection]: unrecognized selector sent to instance 0x79430c0

我试图将表选择绑定到一个NSObjectController并在其上设置值,但它不起作用。

0 投票
1 回答
348 浏览

cocoa - Cocoa 中的自动键值观察

随着对 KVO 和 KVC 的了解越来越多,我变得好奇了——

NSObject 在访问 setter 方法时如何提供自动 KVO?

如果我使用名为 setName 的访问器创建一个新对象,

当有人打电话时,观察者如何得到通知

[obj setName:@"神秘"];

感谢您的任何反馈

0 投票
3 回答
3847 浏览

cocoa - KVC/KVO 和绑定:为什么我只收到一个更改通知?

我看到 Cocoa 的 KVC/KVO 和绑定有一些古怪的行为。我有一个NSArrayController对象,它的“内容”绑定到NSMutableArray,并且我有一个控制器注册arrangedObjectsNSArrayController. 使用此设置,我希望每次修改阵列时都会收到 KVO 通知。但是,KVO 通知似乎只发送一次;第一次修改数组。

我在 Xcode 中建立了一个全新的“Cocoa Application”项目来说明这个问题。这是我的代码:

BindingTesterAppDelegate.h

BindingTesterAppDelegate.m

这是输出:

如您所见,KVO 通知仅在第一次发送(并且在应用程序退出时再次发送)。为什么会这样?

更新:

感谢orque指出我应该绑定到contentArraymy 的NSArrayController,而不仅仅是它的content。只要进行此更改,上面发布的代码就可以工作:

0 投票
3 回答
763 浏览

objective-c - 表视图未根据绑定更新

这是一个非常新手的问题,这是我以前做过很多次的事情,但是这次我错过了一些东西。

在我的 AppDelegate.h 文件中,我声明了一个 NSArray 并将其设置为属性:

然后在 awakeFromNib 方法的 AppDelegate.m 文件中分配它:

然后我有一个设置行数组的方法:

我有一个绑定到的数组控制器,AppDelegate.self.lines然后我有一个绑定到的表列Array Controller.arrangedObjects。我可以确认该数组正在更新(使用 NSLog 测试)但是表的内容没有被更新(它保持空白)。

我在这里有什么明显的遗漏吗?

0 投票
1 回答
577 浏览

cocoa - 观察 NSTreeController 的绑定 CoreData 实体以进行插入/删除

我正在创建自己的可绑定自定义树视图。为此,我想观察 NSTreeController 以更新其项目的多对关系。NSTreeController 绑定到 CD 托管对象上下文。每个深度级别都有自己的 CD 实体,带有 parent/children/isLeaf 属性。我需要在视图中保持相同的层次结构(以及子项的顺序)。如果插入了某些东西,我将开始观察它的 children 属性。我当然需要知道新插入对象的索引路径。

我想确切地知道插入/删除了什么,所以我可以开始观察它是否插入/删除了它的孩子。据我了解,执行此操作的标准方法是在observeValue:forKey ...中查看“更改” NSDictionary,但更改为NULL。

我知道这是一个长期存在的错误,但有一些好的解决方法吗?我已经看到一些示例的视图保存数组,然后当模型更改时,您比较差异。树视图更复杂。这种方式也会浪费内存和 CPU 周期。我有一种正在测试的解决方法。它只是一种作品,所以我不会描述它。

0 投票
1 回答
1052 浏览

cocoa-bindings - NSTableView,列绑定到不同的 NSArrayControllers

我有 NSTableView 和两列:

如您所见,列绑定到不同的 NSArrayController。第一列显示正确的值,但第二列只显示“(”符号。但如果我像这样交换列:

然后我看到第一列的值(在第一个示例中是第二列)和第二列中的“(”。我不明白这种行为。如何将两个数组控制器绑定到一个表?

0 投票
1 回答
137 浏览

cocoa - 有没有办法在 NSTableView 中使用可编辑的 NSSecureTextFieldCell 绑定?

我有一个NSTableView带有几列的列,其中之一设置为使用 anNSSecureTextFieldCell作为它的dataCell. 我正在使用正确配置NSArrayController来向该表提供数据。

问题是我的安全文本字段不想工作。它显示了它所包含的字符串的适当数量的点,但它是不可编辑的!我无法更改安全文本。

可以肯定的是,我对常规的 做了同样的事情NSTextFieldCell,并且一切都像魅力一样。我已正确设置绑定,并且该列设置为可编辑。

我能够在 Apple 的开发者邮件列表中找到对相同问题的引用,但那里发布的解决方法是 2006 年的。

是否有解决此特定问题的方法?
或者
有没有人有更好的解决方法,也许仍然允许使用绑定?

0 投票
2 回答
3154 浏览

cocoa - Mac OS X 上的 Cocoa 应用程序架构

经过长时间的 iPhone 工作后,我将重新开始在 Mac 上进行 Cocoa 开发。我之前在 Mac 上使用 Cocoa 的经验只是一些极小的工具。我正在寻找建立一些严肃的东西。

看看像 iPhoto(或 Mail 或 Things 或....)这样的现代 Cocoa 应用程序,许多应用程序使用单窗口、基于源列表的方法。我正在尽力解决这个问题,因为它似乎提供了很好的体验。但是,我遇到了一些麻烦。这是我认为它应该看起来的样子,但我想知道其他人是如何做到的,以及真正最好的方法是什么:

  • 应用程序的起点是一个 AppDelegate 对象,该对象在启动后会从 nib 创建一个 Window[Controller?] 并设置其数据(例如来自 CoreData)

  • WindowController 加载一个窗口,其中基本上只有一个 NSSplitView。

  • splitview 的左侧有一个设置为 SourceList 样式的 NSTableView 或 NSOutlineView。

  • 右侧是应用程序的主要内容,取决于选择了表格视图的哪个项目。

我会假设某处(在哪里?)有 NSViewControllers 管理将出现在右侧的每个不同视图(想想 iPhoto 如何拥有所有照片、事件、面孔、地点等,我想它们都可以出现在不同的笔尖... 它是否正确?)。

那些视图控制器可能绑定到左侧的源列表......这是如何工作的(源列表可能由 NSViewControllers 的 NSArrayController 支持?)。

无论如何,这些是我的想法,我是完全脱离基地还是......?我浏览了网络,在这里找到了这篇文章,并且查看了一些 Apple 源代码,但我似乎无法理解它。欢迎任何指导。

0 投票
1 回答
134 浏览

cocoa - KVO - 从存储中检索对象并显示版本的问题

我对 KVO 有疑问,我就是不知道它是什么。

我有一个可用于编辑或创建记录的屏幕。该记录由一个模型对象表示,该对象包含许多 NSString 类型的变量。

该字符串的控制器有一个实例变量来保存当前正在处理的模型。当我打开窗口以创建新记录时,我在托管对象上下文中创建了一个新实体,将新创建的实体分配给该实例变量并显示窗口 - 没有问题。

我在模型对象的某些字段中使用手动通知,因为它继承自 NSManagedObject。

但是当我尝试编辑一条记录时——通过从核心数据中获取它并做同样的事情——我得到了错误:[ addObserver:forKeyPath:options:context:] is not supported。关键路径:用户名

NSLogging 对象显示其类型正确。有什么线索吗?