问题标签 [nsarraycontroller]

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 回答
1792 浏览

objective-c - NSManagedObjectContext 和 NSArrayController 重置/刷新问题

我无法让我的 UI 将外部更改(由另一个进程进行)反映到 sqlite 数据存储。

我有一个相当标准的基于核心数据的 NSArrayController / 表格视图。我的应用程序收到通知说数据已进行了外部更改,此时我执行了

问题是,这样做会清除表中的所有数据。数组控制器的arrangedObjects 也是空的。我以为后续

可能有帮助,但它没有。在 managedObjectContext 上执行 fetch 请求显示数据存在并更新,因此 managedObjectContext 知道更改。

关于如何从重置中“恢复”的任何线索?或者重置方法可能完全错误,在这种情况下是否有更好的方法来加载外部更改?

0 投票
4 回答
961 浏览

objective-c - 在 NSArrayController 中删除对象

我有一个NSTableView从中获取数据的NSArrayController,我需要删除当前选定的行。我知道NSManagedObjectContext有一种deleteObject:方法,但是我想不出如何从NSArrayController.

0 投票
5 回答
2991 浏览

cocoa - NSArrayController 和 KVO

当调用更新底层数组的方法时,我需要做什么来更新绑定到 NSArrayController 的 tableView?一个例子可以说明这一点。

当我的应用程序启动时,它会创建一个 SubwayTrain。当 SubwayTrain 被初始化时,它会创建一个 SubwayCar。SubwayCar 有一个可变数组“乘客”。初始化地铁车时,会创建乘客数组,并放入几个 People 对象(假设一个名为“ticket collector”的人和另一个名为“homeless guy”的人)。这些家伙总是在 SubwayCar 上,所以我在初始化时创建它们并将它们添加到乘客数组中。

在应用程序的生命周期中,人们上车。在 SubwayCar 上调用“addPassenger”,并将人作为参数传入。

我有一个绑定到 metroTrain.subwayCar.passengers 的 NSArrayController,并且在启动时,我的检票员和无家可归的人表现良好。但是当我使用 [subwayCar addPassenger:] 时,tableView 不会更新。我已经确认乘客肯定已添加到数组中,但 gui 中没有任何更新。

我可能做错了什么?我的直觉是它与 KVO 相关 - 调用 addPassenger 时数组控制器不知道更新(即使 addPassenger 调用 [passengers addObject:]。我可能会出错 - 如果有帮助,我可以发布代码。

感谢任何愿意提供帮助的人。

更新

所以,事实证明我可以通过改变 addPassenger 方法从

我想这是因为我正在使用 [self setSeatedPlayers]。这是正确的方法吗?复制数组、释放旧数组并更新副本(而不是仅仅添加到现有数组)似乎非常麻烦。

0 投票
1 回答
1198 浏览

cocoa - NSArrayController“内容集”绑定到 NSTreeController 问题

我有一个 NSOutlineView 绑定到一个 NSTreeController 和一个 CoreData 数据模型。NSOutlineView 正确显示他的数据。

NSTableView 的单元格值绑定到 NSArrayController,显示来自 CoreData 的数据。NSTableview 也能正确显示他的数据。

Datamodel 在 NSOutlineView 和 NSTableView 的数据之间有关系

当我尝试将 NSArrayController 的“内容集”绑定到 NSTreeController.selection.name 以显示与 NSOutlineView 选择相关的所有项目时,我收到此错误:

无法从 NSCFString 类的 Untitled 对象创建 NSSet(其中“Untitled”是 NSOutlineViews 节点的值)

并且没有显示 NSTableView 中的数据。

IB 中的所有设置 - 有没有人提示我让它工作?

非常感谢!

0 投票
1 回答
2912 浏览

objective-c - NSTableView 如何通过绑定修改 NSArrayController 的选择?

假设我有以下情况:

替代文字

当我在 NSTableView 中选择不同的行时,它会神奇地更新 NSArrayController (PersonController) 选择。NSTableView 是如何做到这一点的?它会做这样的事情吗:

我问是因为我正在实现自己的可绑定 NSControl,并且我希望它能够像 NSTableView 一样修改绑定的 NSArrayController 的选择。

0 投票
4 回答
1098 浏览

cocoa - Cocoa 绑定到数组中的单个对象

我之前将此问题发布为对相关线程的评论,认为这很简单。该线程在这里:

Cocoa 绑定到数组控制器中的特定项目

这些问题与我正在构建的一个游戏有关(我将在这里更全面地描述它),以尝试学习objective-c和cocoa。可以把它想象成德州扑克。一台服务器保存游戏信息并管理来自可变数量的客户端(总是不止一个)的输入。通过 cocoa 绑定,它使用 IB 中的数组控制器向每个玩家显示存储在服务器上的数组中的游戏公共信息。想象一下桌子上的五张卡片存储在服务器上的 NSArray 中,并绑定到每个客户端的 NSArrayController 的 content 字段。

这部分工作正常,就像一个魅力。但是,每个玩家都有两张需要保密的牌。每个客户应该根据发给特定玩家的牌显示不同的牌。(因为真正发生的是我绑定到一组玩家对象

想象所有卡片都存储在同一个数组中)。所以我的问题是,如何设置与数组控制器之外的单个对象的绑定(或者我是否需要其他控制器)?也就是说,我如何绑定到 thePlayers 数组的一个玩家?

0 投票
2 回答
176 浏览

objective-c - 绑定有问题,不知道是什么

我有一个包含模型对象实例的可变数组。该模型对象有几个属性,一个是“名称”。我在初始化或填充可变数组时没有问题。

我有一个带抽屉的窗户。我在抽屉中添加了一个表格,其想法是抽屉将使用该表格来显示模型对象的多个实例。

我在有抽屉的窗口的 xib 中添加了一个 nsarraycontroller。在 Array Controller Properties 中,我将 Object Controller 设置为模型类的一个实例。在 Array Controller Bindings 上,我将 Controller Content 设置为指向 File Owner 并将 Model Key Path 设置为数组的名称。

在表上,我将内容绑定到 Array Controller,将 Controller Key 绑定到 ArrangeObjects,将 Model Key Path 绑定到 name。

我的问题是,虽然可变数组已正确初始化和填充,但我在抽屉的桌子上看不到单个条目。我在这里错过了什么吗?

0 投票
2 回答
91 浏览

objective-c - 从 nsarraycontroller 检索模型对象的成本是多少?

我有一个带桌子的窗户。该表按名称列出了几个模型对象。这些模型对象支持一个窗口,并且该窗口的组件都依赖于模型对象的值。

该窗口上的某些表无法绑定到模型对象,必须使用数据源填充。在这种情况下,我从数组控制器中检索当前选定的对象(因为用户单击了列出模型对象的表而被选中)并手动操作它们。

我的问题是:每次需要时从数组中检索模型对象的成本是多少?我应该创建一个模型对象类型的全局变量并在每次用户单击该表时进行设置,还是每次需要时都可以从数组控制器中检索一个值?

0 投票
2 回答
3187 浏览

cocoa - NSArrayController 创建、修改然后选择一个新对象

我基于 NSPersistentDocument 的应用程序的主视图是一个表格视图(绑定到 NSArrayController),显示记录列表,在它下面有一个“添加记录”按钮。我希望按钮导致以下(据说是微不足道的)行为。

  1. 创建一个新对象
  2. 为新对象设置一些默认值(存储在主文档中,全局不可用)
  3. 将其添加到表视图中。

以下是我尝试或拒绝的事情:

  1. 使用 NSArrayController "add" 动作 - 问题:不会返回新对象并且实现被延迟所以不可能修改新创建的对象
  2. 覆盖数据类的初始化 - 不起作用 - 我需要访问存储在文档类实例中的数据
  3. 子类 NSArrayController 并覆盖“newObject” - 再次 - 将不起作用,因为我需要访问存储在文档中的数据。
  4. 以下代码“几乎”工作:

    /li>

对于未保存的文档,此代码实际上运行良好。但是,如果我保存文档并重新打开它,然后单击添加按钮会导致新记录在表中显示两次。显然“addObject”是多余的(尽管它在未保存的文档中工作正常)但没有它,新对象不会被选中。

0 投票
3 回答
196 浏览

cocoa - 如何以编程方式为 NSArrayController 设置对象类

我对应该是非常简单的事情有疑问。我想创建一个 NSArrayController 并指定它管理的类。问题是,我无法找出在 setObjectClass 方法中指定 Class 的正确方法。我想做以下事情:

SKHProject 是我在实现文件中导入的一个类。我不断收到“'SKHProject' 之前的预期表达式”错误,但我无法找出正确的表达式。我哪里错了?