问题标签 [nsobjectcontroller]

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 投票
2 回答
2641 浏览

core-data - 在单个窗口界面中跨多个视图控制器绑定选择

我在思考如何在两个视图控制器之间连接几个 NSArrayControllers 时遇到了问题。我想同步源列表视图中的选择以更新第二个详细视图控制器中的值。

我使用Cocoa Dev Central Build A Core Data Tutorial作为起点,但是已经分解了架构,因此有一个包含两个 NSViewControllers 的 NSWindowController:一个用于左侧的帖子表,一个用于帖子的详细信息正确的。

NSWindowController 子类有一个绑定到 Post 实体的 NSArrayController 和一个只读的 managedObjectContext 访问器,它指向[[NSApp delegate] managedObjectContext]

然后我在方法中初始化两个视图控制器windowDidLoad

MDVCPostsListViewController有一个 NSArrayController 绑定到 Post 实体,它的托管对象上下文绑定到父窗口控制器的托管对象上下文(全部通过 Interface Builder)

MDVCPostDetailViewController有一个 NSObjectController 绑定到窗口控制器的托管对象上下文,并且内容对象通过postsListsViewController.postsArrayController.selection. 这似乎是一个非常糟糕的黑客攻击。

我怎样才能得到它,以便更改MDVCPostsListViewController表视图中的选择将更新中的选定值MDVCPostDetailViewController?我觉得我很接近,但不确定缺少什么或最佳路线是什么。我确实觉得postsListsViewController.postsArrayController.selection绑定非常hacky。希望有更好的方法。

我已经上传了我的示例项目,它为那些喜欢查看代码而不仅仅是阅读描述的人展示了这一点。您可以从我的网站http://www.secondgearsoftware.com/attachments/stackoverflow_objectcontroller.zip获取它

0 投票
1 回答
139 浏览

objective-c - 我需要两个 NSObjectControllers 吗?

我正在学习 Cocoa 绑定。我有两个完全不同的对象,每个对象都有一个我想与用户界面项同步的 iVar。但由于它们是两个不同的对象,我只能在一个 NSObjectController 的“内容”出口上拥有,我需要另一个吗?

0 投票
1 回答
460 浏览

cocoa - 核心数据:在基于文档的应用程序中实例化“根对象”

我正在使用 Core Data 创建一个基于文档的项目,并且遇到了对我来说可能只是一个概念性问题,因为虽然我对 Cocoa 并不陌生,但这是我第一次尝试使用 Core Data。我想要完成的事情应该相对简单:随着每个新文档的启动,我想要一个创建的模型对象的新实例,用作“根”对象。

我所做的是将 NSObjectController 添加到我的 xib,将其模式设置为实体名称(提供正确的实体名称),选中“准备内容”,并将其托管对象上下文绑定到文件的所有者, managedObjectContext 作为模型键路径. 为了测试这一点,我将主窗口的标题绑定到对象控制器,控制器键作为选择,模型键路径作为实体中的键之一。

我知道我可以通过编程方式创建我的根对象,但我正在尝试采用 Apple 推荐的中介模式。我已经在“采用中介者模式”部分下看到了部门员工教程中的说明,详细的步骤正是我相信我所做的。

有什么想法吗?

编辑:也许我没有正确说明问题。模型是在 Core Data 中创建的,并且根据我的需要设置关系(使用“根”、子节点和叶子节点,使用一对一父节点关系、多子节点关系和 isLeaf 布尔属性)。我的问题是确保每次启动新文档时都将此根对象实例化为单例。根对象和当前文档之间应该存在 1:1 的关系,该根对象必须始终存在并且无需任何用户交互即可创建它,并且创建并附加到根的子节点是数据对象由应用程序使用和操作。

我已经以编程方式实现了上述功能,但为了符合核心数据原则,我希望完全采用中介者模式,而不是在我的应用程序逻辑中管理任何数据对象的创建。

0 投票
0 回答
213 浏览

objective-c - 什么是控制器键“选择”以及它如何获得其默认状态?

我现在正在开发一个需要使用绑定作为控制器的胶水代码的应用程序。我发现本教程将NSStepperand绑定NSTextField到模型并且效果很好。问题是我需要以编程方式执行此操作,但这有点令人困惑。

这是教程

我在控制器类中做了什么:

_model我的模型在哪里。但是,如果我这样做:

它不像我预期的那样工作。

有人可以像我五岁那样向我解释这selection部分是什么,NSObjectController以及我如何使它像教程一样工作,以便它引用模型对象?

0 投票
1 回答
492 浏览

cocoa - 如何防止由于绑定到自身而导致的保留循环

我有一个应用程序,我需要从我的子视图访问模型数据。我一直在使用绑定来跨视图传递数据;但是,绑定self似乎导致了保留周期(dealloc 永远不会被调用)。如果不在 dealloc 方法中,我应该什么时候删除绑定?谢谢。

PS 我知道绑定到代理对象控制器的方法,但我想尽可能避免使用它。

这是我一直在做的一个例子:

0 投票
1 回答
248 浏览

objective-c - 通过应用程序委托类更改在模型类中声明为属性的实例变量的值

我在我的示例应用程序中做以下事情:

我创建了一个模型类并在其中声明了一个数组作为属性。

在我的应用委托类中,我将 MyModel 声明为一个属性。

在 MainMenu.xib 中,我拖放了一个对象控制器对象,并在 MyAppDelegate 中将其绑定到 myModel。

我正在努力实现以下目标:

我在 MyAppDelegateChange 中定义了一个动作测试:它绑定到一个按钮,并尝试更改 charactersToDisplay 中的值。

问题是:

当我使用此代码时,它不起作用:

但是,如果我尝试使用以下代码通过对象控制器更改其值,它正在工作:

谁能建议我 - 为什么当我尝试通过调用 myModel 上的 setter 方法直接更改值时它不起作用?

0 投票
1 回答
3939 浏览

cocoa - 如何将 NSTextField 的值绑定到 NSObjectController 的内容而不会出错?

我在这里有一个非常简单的设置,Xcode 给了我一个无注释的红色“!” 在界面生成器中标记。

从基于核心数据的文档模板开始。文档 xib 有一个 NSObjectController 实例,其托管对象上下文绑定到文件的所有者(我的 NSPersistentDocument 子类)。存在一个 NSTextField,我想将其值绑定到 NSObjectController ......这就是问题所在。

我为“模型键路径”键入“标题”,因为这是我的 NSManagedObject 的正确属性,它应该出现在文本字段中。当我单击空的 Controller Key 字段时,自动完成奇怪地建议了仅适用于NSArrayController的字段:

奇怪的自动完成候选人的屏幕截图

每当我尝试键入“内容”作为控制器键(因为这是 NSObjectController 的正确属性)然后点击 Tab/Return/whatever 时,“内容”会向下移动到模型键路径,如下所示:

错误截图

这个红色感叹号是干什么用的?当我将“Controller Key”留空并将“Model Key Path”留为 content.title 时,该应用程序可以正常工作。绑定是正确的,并反映了我的 NSManagedObject 的“标题”属性。我绝对确定“对象控制器”是 NSObjectController 的一个实例。

0 投票
2 回答
129 浏览

objective-c - 什么时候真正可以访问 NSManagedObject?

我有个问题。

我有一个名为“mapController”的 NSObjectController,我想在创建对象时设置一些默认值。按照文档的建议,我在文档的windowControllerDidLoadNib方法中执行此操作。但是……</p>

我试过了:

mapController 的内容在核心数据“便笺簿”中,但我无法访问它。我必须像这样设置它的一个属性:

这没有错误,文件被标记为已更改,但我测试了值:

什么时候控制器的内容真的在这里?屏幕上出现了一些东西,但是……实际上是什么?阅读文档对我没有帮助……</p>

0 投票
0 回答
205 浏览

binding - 使用 NSObjectController 将数字绑定到 NSTextField,但无法显示

我对可可编程很陌生。我正在学习绑定,试图制作一个简单的绑定代码:

anObjectCtrler是Interface Builder中的NSObjectController,我将一个NSTextField“绑定”到对象控制器,anObjectCtrler的类,在“value”的模型键路径和“selection”的控制器键处;对象控制器具有作为对象的引用到文件所有者的出口。

当我运行代码时,NSTextField 显示“No Selection”,而不是“self.aValue”的值。您可以看到我通过使用“NSLog ...”的输出来检查对象控制器的内容,它显示了正确的值。

任何人都可以帮我解决这个问题,好吗?

非常感谢。

0 投票
1 回答
1948 浏览

objective-c - KVO:+keyPathsForValuesAffecting不适用于 NSObjectController 的(子类)

我有一个支持 KVO 的类(称为它Observee),它的affectedValue动态属性受属性的影响affectingValue。属性之间的依赖关系由实现+keyPathsForValuesAffectingAffectedValue方法定义。

将值设置为affectingValue通知affectedValue 已按我的预期更改, 除非 OvserveeNSObjectController. 完整示例如下:

Observee该示例工作正常,并在派生时输出如下NSObject

但是当Observee派生时NSObjectController

(请注意,“受影响的密钥路径 = 受影响的值”不存在。)

似乎keyPathsForValuesAffectingAffectedValue在这两种情况下都调用了它,但在后者中它是无操作的。

此外,任何涉及 (subclass of) 实例的关键路径NSObjectController都不会影响其他关键路径,例如:

在这种情况下,如何声明关键路径之间的依赖关系?而且,为什么这整件事会发生?

(是的,我知道will/didChangeValueForKey:和朋友们,但是用(另一个)setter 包裹每一个影响关键路径是可怕的,我想避免它。)