问题标签 [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 投票
3 回答
1518 浏览

objective-c - 更新绑定到 NSArrayController 的表列

我对可可绑定的世界还很陌生,而且我遇到了一些麻烦(也许/可能是由于误解)。

我有一个单例,其中包含一个称为插件的 NSMutableArray,其中包含类插件的对象。它有一个名为 loadPlugins 的方法,可以将对象添加到 plugins 数组中。这可以在任何时候调用。它已作为实例添加到 Interface Builder 中。

IB 中还有一个 NSObjectController,它的内容出口连接到单例。还有一个 NSArrayController,它的 contentArray 绑定到 NSObjectController(controller key 是 'selection',model key path 是 'plugins',object class name 是 'Plugin')。

最后,我有一个包含 2 列的表视图,其值使用 Plugin 类中的属性键绑定到 NSArrayController 的排列对象。

到目前为止是标准的(至少据我从教程中可以看出)。我的问题是,当在单例中调用 loadPlugins 方法并将对象添加到 plugins 数组时,表格不会更新以显示对象(除非在加载 nib 之前调用 loadPlugins)。在 tableView 上调用 -reloadData 不会做任何事情。

有没有办法告诉 NSArrayController 引用的数组已更新?我知道有 NSArrayController 的 -add: 方法,可以在 loadPlugins 中使用,但这是不可取的,因为我想让单例与显示方面完全分开。

这似乎与: Refresh Cocoa-Binding - NSArrayController - ComboBox有关

这条线:“编辑控制器背后的数组”似乎可以指出问题所在,但我希望有可能让单身人士不知道控制器。

提前致谢。

\编辑...

根据 TechZen 的建议,绑定如下:

0 投票
1 回答
725 浏览

cocoa - NSTableView 绑定到 NSArrayController

在 Interface Builder 中,我有一个 NSTableView,其中两列绑定到一个普通的 NSArrayController。NSArrayController 将其内容数组绑定到我的应用程序委托中的 NSMutableArray。我已经使用了进一步的绑定来通过绑定设置行的添加和删除(魔术!)。

我现在遇到的问题是我想获取当前选择的 NSTableView 行并使用它的索引来查找存储在我的 NSArrayControllers 关联数组中的对象。我遇到的问题是试图访问 NSTableView。

在我的应用程序委托中,使用以下代码将导致我的应用程序崩溃:

同样,这也会导致我的应用程序崩溃:

鉴于上面代码的简单性,我一定做错了什么?

0 投票
1 回答
474 浏览

objective-c - Cocoa @sum 数组运算符太慢 - 替代方案?

我有一个文本字段值绑定到使用@sum 的键路径。当数组控制器被过滤时,文本字段会正确更新,但非常缓慢,在每次按键后都会滞后于 UI 或彻底的抢滩(随着排列对象中的项目数量减少而减少)。如果我不使用@sum,就没有延迟;我已经把它缩小到这个。

有没有更快的方法来做同样的事情?

0 投票
1 回答
1053 浏览

core-data - 无效的接收器类型“NSUInteger”

我有一个核心数据实体,其头文件如下所示:

它的实现文件如下所示:

现在,我有一段看起来像这样的代码:

'myEntityArrayController' 对象是一个管理 MyEntity 的所有实体的 NSArrayController。此代码正确执行,但是 XCode 总是针对最后一行代码给出警告“无效的接收器类型 'NSUInteger'”。出于某种原因,XCode 认为该index方法返回一个 NSUInteger。我不确定它为什么会这样认为,因为“objectAtIndex”返回一个“id”类型的对象。

我已经多次清理了这个项目,这些警告已经存在了一段时间。任何建议表示赞赏。

0 投票
1 回答
1136 浏览

cocoa - 使用 Cocoa Bindings 和 NSArrayController 观察模型变化

NSArrayController在控制器中绑定了一个可变数组,该数组管理我的模型对象数组。数组控制器绑定到我的 UI。它运作良好。

现在我试图手动观察我的控制器类中我的模型中的值何时发生变化(基本上我将更改后的模型标记为“needsToSave”以备后用,但是当它发生变化时我还有一些其他任务)。

我已经阅读了 KVO,但我不完全确定我需要观察什么...... NSArrayController?对象数组?每个模型对象本身?混乱。

任何指针都会非常有帮助。提前致谢!

0 投票
2 回答
1302 浏览

cocoa - 子类化 NSArrayController 以限制排列对象的大小

我正在尝试限制数组控制器中的对象数量,但如果需要,我仍然希望能够访问整个数组。我想出的一个简单的解决方案是继承 NSArrayController,并定义一个名为“limitedArrangedObjects”的新方法,它从真实的排列对象集中返回有限数量的对象。(我已经看到限制 NSArrayController 中的对象数量,但这并不能解决我的问题。)

我希望这个属性可以通过绑定来观察,所以我在它上面设置了一个对arrangedObjects 的依赖。

问题是,当排列对象被更新时,limitedArrangedObjects 似乎没有观察到排列对象中的值变化。我已经将 NSCollectionView 连接到 limitedArrangedObjects,并且正在显示零个对象。(如果我将它绑定到排列对象,所有对象都会按预期显示。)

有什么问题?

以下是相关代码:

0 投票
2 回答
723 浏览

core-data - NSArrayController 已排序且唯一(无重复),可在核心数据应用程序的弹出窗口中使用

我有一个核心数据应用程序,其实体 OBSERVATION 具有 DEALNAME 属性之一。我想通过 Interface Builder 或通过对 NSArrayController 进行自定义修改来引用唯一排序的交易名称列表,以便我可以在弹出窗口中使用它们。

我尝试使用@distinctUnionOfSets(和@distinctUnionOfArrays),但无法找到正确的键序列。

我可以通过提供排序描述符对 ArrayController 进行排序,但不知道如何消除重复项。

@distinct... 键是正确的方法吗?它似乎提供了优化 IB 使用的最简单方法。

是否有用于删除重复项的谓词形式?

或者我是否需要使用我的自定义控制器来提取特定交易名称的 NSSet,将它们放回数组中并对其进行排序并从 IB 引用自定义数组?

任何帮助,将不胜感激。我很惊讶其他人没有尝试在表格视图中创建一个排序独特的弹出窗口。

0 投票
2 回答
1120 浏览

cocoa - NSArrayController 不适用于 NSTableView 的 NSMutableDictionary

我正在尝试使用 NSMutableDictionary 记录的 NSMutableArrayController 在 NSTableView 中显示内容。

我按照下面写的步骤操作:

  1. 在应用程序委托类中,我创建了一个名为“geniuses”的 NSMutableArray 对象,并存储了一些带有键的 NSMutableDictionary 对象:“geniusName”和“domain”。

  2. 我在 IB 中获取了一个 NSArrayController 对象,将其控制器内容属性绑定到应用程序委托类,并将其模型键路径设置为“天才”。在属性检查器窗格中,将模式设置为类,将类名设置为 NSMutableDictionary。添加了键:“geniusName”和“域”。

  3. 在 IB 我拿了一个表格视图对象。将其内容属性绑定到数组控制器,控制器键路径设置为排列对象。其第一列的值属性绑定到数组控制器,控制器键路径设置为排列对象,模型键路径设置为“geniusName”。其第二列的值属性绑定到数组控制器,控制器键路径设置为排列对象,模型键路径设置为“geniusName”。

在我尝试构建和运行项目时遵循这些步骤后,我发现未填充的表视图。

谁能建议我哪里可能错了?

谢谢,

米拉杰

0 投票
1 回答
1667 浏览

objective-c - 如何在两个 nib 文件之间共享 NSArrayController?

我有一组图像和两个 nib 文件。一个 nib 文件有一个在 NSTableView 中显示图像的窗口。另一个 nib 有一个窗口,可以将图像数组绘制到 NSView 中,并在选定的图像上绘制一个突出显示。

图像数组由 NSArrayController 控制。我无法让两个笔尖共享 NSArrayController。我将有两个单独的 NSArrayControllers 绑定到相同的内容,但我也希望两个 nib 共享控制器的选择;也就是说,如果您在表格窗口中选择了一个图像,它也会在另一个窗口中被选中。

有没有标准的方法来做到这一点?

0 投票
1 回答
4511 浏览

nsarray - 简单的 NSTableView 绑定示例

我正在尝试通过绑定填充 2 列 NSVTableView,但数据未显示在表中。

在 XCode 中:

我的 AppDelegate 中有一个 NSMutableArray,它将保存数据以及相应的 @property 和 @synthesize。

在一个事件中,我在 NSMutableArray 上调用 [removeAllObjects] 并用一些 NSDictionary 对象重新填充它。每个字典包含 2 个 KVP:一个 NAME 和一个 VALUE。

在 IB 中:

我添加了一个 NSArrayController 并将它的 Content Array 绑定到我的 AppDelegate 并将 ModelKeyPath 设置为 AppDelegate 中 NSMutableArray 的名称。

在 NSTableView 上,我将 Content 绑定到 ArrayController。ControllerKey = "arrangedObjects",ModelKeyPath =

对于两列中的每一列,我将 Value 绑定到 AppController 并将 ModelKeyPaths 分别设置为 NAME 和 VALUE。ControllerKey = "排列对象"。


我尝试了其他几件事,例如在应用程序委托中使用 NSArray 并在每次需要更新值时创建一个新的。一定有一些小事我忘记了。它是什么?

乔吉