问题标签 [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.
cocoa - 使用 addObserver:forKeypath:options:context: init 方法的奇怪问题
根据 Apple 和我看到的大量示例,使用 KVO/KVC 来观察自己是没有问题的。同样根据这些相同的来源,通过在对象的 init 方法中使用 addObserver:forKeypath:options:context: 来设置它不是问题,a la:
不幸的是,由于某种原因,当我在那里执行此操作时,不会调用我的观察者方法。如果我将 addObserver 调用移动到另一个方法,然后在调用方法中调用该方法:
那么一切都很好。这是 NSImageView 的一个子类,所以这里没有任何“awakeFromNib”类型的替代品......我真的在这里摸不着头脑,我敢肯定我错过了一些明显的东西——比如关于事情的规则导致 KVO on self 在 init 方法中不起作用,但我在文档中没有找到任何可以在这里给我任何提示的内容。
我不知道什么?
cocoa - 访问 NSTableView 中的托管对象
我有一个NSTableView
绑定到一个NSArrayController
,它绑定到NSManagedObjectContext
一个实体。如何以编程方式在表格视图中当前选择的对象上设置属性?我尝试直接通过
[[[documentsController arrangedObjects] objectAtIndex:[tableView selectedRow]] setObject:[NSDate date] forKey:@"dateProperty"]
但这给了我一个例外:
-[_NSControllerArrayProxy selection]: unrecognized selector sent to instance 0x79430c0
我试图将表选择绑定到一个NSObjectController
并在其上设置值,但它不起作用。
cocoa - Cocoa 中的自动键值观察
随着对 KVO 和 KVC 的了解越来越多,我变得好奇了——
NSObject 在访问 setter 方法时如何提供自动 KVO?
如果我使用名为 setName 的访问器创建一个新对象,
当有人打电话时,观察者如何得到通知
[obj setName:@"神秘"];
感谢您的任何反馈
cocoa - KVC/KVO 和绑定:为什么我只收到一个更改通知?
我看到 Cocoa 的 KVC/KVO 和绑定有一些古怪的行为。我有一个NSArrayController
对象,它的“内容”绑定到NSMutableArray
,并且我有一个控制器注册arrangedObjects
为NSArrayController
. 使用此设置,我希望每次修改阵列时都会收到 KVO 通知。但是,KVO 通知似乎只发送一次;第一次修改数组。
我在 Xcode 中建立了一个全新的“Cocoa Application”项目来说明这个问题。这是我的代码:
BindingTesterAppDelegate.h
BindingTesterAppDelegate.m
这是输出:
如您所见,KVO 通知仅在第一次发送(并且在应用程序退出时再次发送)。为什么会这样?
更新:
感谢orque指出我应该绑定到contentArray
my 的NSArrayController
,而不仅仅是它的content
。只要进行此更改,上面发布的代码就可以工作:
objective-c - 表视图未根据绑定更新
这是一个非常新手的问题,这是我以前做过很多次的事情,但是这次我错过了一些东西。
在我的 AppDelegate.h 文件中,我声明了一个 NSArray 并将其设置为属性:
然后在 awakeFromNib 方法的 AppDelegate.m 文件中分配它:
然后我有一个设置行数组的方法:
我有一个绑定到的数组控制器,AppDelegate.self.lines
然后我有一个绑定到的表列Array Controller.arrangedObjects
。我可以确认该数组正在更新(使用 NSLog 测试)但是表的内容没有被更新(它保持空白)。
我在这里有什么明显的遗漏吗?
cocoa - 观察 NSTreeController 的绑定 CoreData 实体以进行插入/删除
我正在创建自己的可绑定自定义树视图。为此,我想观察 NSTreeController 以更新其项目的多对关系。NSTreeController 绑定到 CD 托管对象上下文。每个深度级别都有自己的 CD 实体,带有 parent/children/isLeaf 属性。我需要在视图中保持相同的层次结构(以及子项的顺序)。如果插入了某些东西,我将开始观察它的 children 属性。我当然需要知道新插入对象的索引路径。
我想确切地知道插入/删除了什么,所以我可以开始观察它是否插入/删除了它的孩子。据我了解,执行此操作的标准方法是在observeValue:forKey ...中查看“更改” NSDictionary,但更改为NULL。
我知道这是一个长期存在的错误,但有一些好的解决方法吗?我已经看到一些示例的视图保存数组,然后当模型更改时,您比较差异。树视图更复杂。这种方式也会浪费内存和 CPU 周期。我有一种正在测试的解决方法。它只是一种作品,所以我不会描述它。
cocoa-bindings - NSTableView,列绑定到不同的 NSArrayControllers
我有 NSTableView 和两列:
如您所见,列绑定到不同的 NSArrayController。第一列显示正确的值,但第二列只显示“(”符号。但如果我像这样交换列:
然后我看到第一列的值(在第一个示例中是第二列)和第二列中的“(”。我不明白这种行为。如何将两个数组控制器绑定到一个表?
cocoa - 有没有办法在 NSTableView 中使用可编辑的 NSSecureTextFieldCell 绑定?
我有一个NSTableView
带有几列的列,其中之一设置为使用 anNSSecureTextFieldCell
作为它的dataCell
. 我正在使用正确配置NSArrayController
来向该表提供数据。
问题是我的安全文本字段不想工作。它显示了它所包含的字符串的适当数量的点,但它是不可编辑的!我无法更改安全文本。
可以肯定的是,我对常规的 做了同样的事情NSTextFieldCell
,并且一切都像魅力一样。我已正确设置绑定,并且该列设置为可编辑。
我能够在 Apple 的开发者邮件列表中找到对相同问题的引用,但那里发布的解决方法是 2006 年的。
是否有解决此特定问题的方法?
或者
有没有人有更好的解决方法,也许仍然允许使用绑定?
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 源代码,但我似乎无法理解它。欢迎任何指导。
cocoa - KVO - 从存储中检索对象并显示版本的问题
我对 KVO 有疑问,我就是不知道它是什么。
我有一个可用于编辑或创建记录的屏幕。该记录由一个模型对象表示,该对象包含许多 NSString 类型的变量。
该字符串的控制器有一个实例变量来保存当前正在处理的模型。当我打开窗口以创建新记录时,我在托管对象上下文中创建了一个新实体,将新创建的实体分配给该实例变量并显示窗口 - 没有问题。
我在模型对象的某些字段中使用手动通知,因为它继承自 NSManagedObject。
但是当我尝试编辑一条记录时——通过从核心数据中获取它并做同样的事情——我得到了错误:[ addObserver:forKeyPath:options:context:] is not supported。关键路径:用户名
NSLogging 对象显示其类型正确。有什么线索吗?