问题标签 [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 回答
3707 浏览

cocoa - Cocoa:从 NSArrayController 中删除项目

我有一个绑定到 NSTableView 的 NSArrayController。有了这个,我就有了典型的添加/删除按钮。

虽然添加项目非常简单(我调用一个方法,使用默认值创建一个对象并添加它),但我在从控制器中删除对象时遇到问题。我知道在将按钮与 ArrayController 的删除操作连接时,我可以轻松地做到这一点。但这不是我想要的。我需要手动删除对象,因为我有一些额外的代码要处理。

无论如何,移除对象似乎比我预期的要复杂得多。它已经尝试过:

或者

它们似乎都不起作用。如何使用 Objective-C 代码从 NSArrayController 中删除选定的对象?

0 投票
2 回答
670 浏览

cocoa - NSSearchField 的滞后接口通过绑定连接到 NSArrayController

所以我有一个 NSSearchField 通过绑定直接连接到一个 NSArrayController,附加到 filterPredicate,因此无需任何代码,用户只需输入 NSSearchField 并过滤在界面中呈现给他的 NSArrayController 中的对象列表(具体来说是一个 NSCollectionView)。

连接 NSSearchField 以提供实时搜索,因此 NSCollectionView 在用户输入时立即被过滤,而不是在等待用户停止输入的短时间内。

但是,问题在于这使得界面非常滞后。键入显着延迟了 0.5-1 秒,看起来 NSCollectionView 正在尝试为用户输入的搜索字符串的每个部分的项目的每一次重新排列设置动画。

我想要的是实时搜索,但搜索字段中的输入是流畅的,并且结果要尽可能快地过滤。有没有办法通过绑定来做到这一点,或者我需要在一个单独的线程上放入一些触发 filterPredicate 的自定义代码?

(请注意,我在 NSArrayController 上设置了自定义排序算法,删除它似乎有助于解决滞后问题,但并非完全如此。)

0 投票
2 回答
729 浏览

cocoa - 暂时禁用NSArrayController filterPredicate,还是咨询ManagedObjectContext?

我有一个 NSArrayController 绑定到我的托管对象上下文中的一个类。在运行时 NSArrayController 可以应用许多不同的过滤谓词。在某些时间间隔,我想遍历我的 NSArrayController 的内容,而不管应用到它的过滤谓词。

为此,我将 filterPredicate 设置为 nil,然后在遍历我的数组后恢复它。这似乎可行,但我想知道这是否是最佳做法?我应该改为手动轮询我的托管对象上下文吗?

0 投票
1 回答
248 浏览

cocoa - 如何使用 NSArrayController 和可可绑定在 NSTextField 中显示员工的平均工资

我是可可绑定的新手,所以我尝试制作一个简单的应用程序,它可以使用可可绑定简单地计算员工工资的平均值并将其显示在文本字段中。我按照以下步骤操作:

  1. 制作模型类:Person现在只有一个属性-

    @property (readwrite, assign) int 薪水;

  2. 在应用程序委托类中,我初始化了一个可变数组:personArray使用某些对象,如下所示:

    /li>
  3. 在 IB 中,我删除了一个 NSArrayController 对象,将其模式设置为 Class - ,在属性窗格中Person添加了键。salary然后在绑定窗格中,将内容数组绑定到 ApplicationDelegate 类,并将模型键路径设置为self.personArray.

  4. 在窗口上放置了一个 NSTextField。将其值绑定到 ArrayController 对象。分配的控制器键为 - arrangedObjects。分配模型键路径到@avg.salary

当我执行应用程序时,我发现文本字段中没有显示任何值。

任何人都可以建议我在哪里可能是错的或其他一些最好的方法来完成它

谢谢,

米拉杰

0 投票
2 回答
541 浏览

sorting - 通过可可在 IB 中完成时按字符串长度对表列进行排序无法按预期工作 - 绑定

我制作了一个示例应用程序,使用 NSArrayController 在 NSTableView 上显示员工的工资列表。

基本功能按预期工作。Also sorting is working fine when Selector - compareor caseInsensitiveCompareis assigned in attribute pane for table column- employeeName.

当我尝试通过将 IB 中的选择器设置为 - 来按字符串长度对其进行排序时,会出现问题length,对于表列 - employeeName。它按字符串长度排序,但不恰当。

It is doing sorting on alternate clicksIE。在第一次单击时,它会按长度降序对表中的内容进行排序。然后在第二次单击时,它不会按长度按升序排列内容,而是将箭头设置为按升序排列。然后在第三次单击时,它按长度按升序排列内容,但将表格列顶部的箭头设置为降序,依此类推......

任何人都可以建议我是否在某个地方错了?

谢谢,

米拉杰

0 投票
1 回答
2730 浏览

objective-c - NSArrayController 在多个 NIB 中访问单例 NSMutableArray

预警 - 代码示例有点长...

我有一个可以从我的应用程序中的任何位置访问的单例 NSMutableArray。我希望能够NSMutableArray从多个 NIB 文件中引用,但通过NSArrayController对象绑定到 UI 元素。初始创建不是问题。NSMutableArray当NIB被加载并且一切看起来都很好时,我可以引用单例。

但是,NSMutableArray通过添加或删除对象来更改并不会启动 KVO 来更新NSArrayController实例。我意识到“在控制器背后改变”被认为是 Cocoa-land 的一个不可行的部分,但我没有看到任何其他方式以编程方式更新NSMutableArray并让每个人都NSArrayController得到通知(当然它不起作用。 ..)。

我在下面简化了类来解释。

简化的单例类头:

简化单例方法:

在这个简化的示例中,数组中对象的标头和模型:

头文件:

方法文件:

NSArrayController现在想象两个具有适当实例的NIB 文件。我们会打电话给他们myArrayControllerInNibOnemyArrayControllerInNib2initNIB 控制器中的每个数组控制器设置数组的内容:

当每个 NIBNSArrayController正确初始化绑定到共享数组时,我可以在 UI 中看到您所期望的数组内容。我有一个单独的后台线程,当内容基于外部事件发生更改时,它会更新全局数组。当需要在这个后台线程中添加对象时,我只需将它们添加到数组中,如下所示:

这就是事情分崩离析的地方。我不能在全局数组上调用willChangeValueForKeyanddidChangeValueForKey因为共享实例没有键值(我应该在单例类中添加它吗?)

我可以在 NIB 控制器中触发NSNotification并捕获它,然后执行[myArrayControllerInNibOne rearrangeObjects]; 或将内容设置为并将内容nil重新分配给数组 - 但这两者似乎都是黑客和。此外,将 to 设置NSArrayControllernil然后返回到全局数组会导致 UI 内的视觉闪烁,因为内容被清除并重新填充。

我知道我可以直接添加到NSArrayController并且数组得到更新,但我没有看到 a)其他NSArrayController实例将如何更新和 b)我不想将我的后台线程类显式绑定到 NIB 实例(也不我应该这样做)。

我认为正确的方法是在后台线程中以某种方式触发 KVO 通知addObject,或者向存储在全局数组中的对象添加一些东西。但我不知所措。

需要注意的是,我没有使用 Core Data。

任何帮助或帮助将不胜感激。

0 投票
2 回答
410 浏览

cocoa - 将 NSSegmentedControl 与 CoreData 一起使用

我有一个核心数据应用程序,可以添加或删除客户的许多约会之一,其中按钮绑定在 IB 到我的约会 ArrayController。约会内容来自提要列表中选择的任何客户端。我希望使用 SegmentedControl,据我所知,这需要我以编程方式添加和删除约会中的对象。我已经成功地使用 Marcus Zarra 在 p54 上的核心数据一书中的代码添加了一个约会,但是我无法删除一个选定的约会。我正在使用自定义表格单元格,我怀疑这可能会使事情复杂化。

简而言之,我希望以编程方式在选定对象上实现 ArrayController 的 remove: 方法的等价物。

有人可以帮忙吗?

0 投票
1 回答
369 浏览

objective-c - 为什么 NSArrayController 不通过绑定调用访问器方法?

我正在尝试使用以下访问器方法拦截 NSArrayController (thingsController) addObject 方法。

我有两个类:Thing 和 MyDocument。事物有一个属性:名称。MyDocument 有一个名为 things 的 NSMutableArray 和一个名为 thingsController 的 NSArrayController。在 NIB 中,文件的所有者设置为 MyDocument,我将 NSArrayController 的内容数组绑定到文件的所有者,并将模型路径设置为事物。NSArrayController 也将模式设置为 Class,Class Name 设置为 Thing,并且它有一个名为 name 的键。在 MyDocument 中,我有一个名为 createThing 的方法,它首先发送 thingsController newObject,然后发送 addObject。如果我在 Thing 的 init 方法中设置断点,它会在 thingsController 被发送 newObject 时被调用。但是,当 thingsController 被发送 addObject 时,我的访问器方法 insertObject:(Thing *)thing inThingsAtIndex:(NSUInteger)index 没有被调用。

我已经阅读了 Apple 关于 Key-Value Coding Accessor Methods 的文档,我认为我是合规的,但是,我一定遗漏了一些东西。

任何帮助将不胜感激。

下面的代码...

东西.h

东西.m

我的文档.h

我的文档.m

0 投票
1 回答
773 浏览

objective-c - 优雅地将对象添加到arraycontroller,它本身链接到另一个arraycontroller?

我是 OS X 编程的新手,但总体上喜欢它。我有以下问题:

我有两个核心数据实体通过一对多与它们各自的数组控制器(股票控制器和价格历史控制器,后者控制器绑定到股票控制器,控制器键 = 选择和模型键路径 = priceHistory,其中是将股票实体链接到 PriceDataPoint 实体的关系,由价格历史控制器控制。

这一切都像我的 UI 中的魔术一样工作,我可以在其中选择股票并在选择时为每个股票添加/删除价格点。但是,我也需要能够以编程方式执行此操作。

  1. 如果我只是[stockController add:self]用具有正确默认值的新对象调用 UI 更新,链接到所选股票——即使“自我”不是正确的类/实体。这对我来说是一个困惑点,我不明白(我知道股票控制器通过 KVO 绑定知道所选股票,并且可能会根据需要设置关系,但我不明白它是如何“投射”的''self',这是一个相当随机的类到所需的对象类型(一个普通的NSManagedObject)?其次,如果我这样做,我如何获得对该对象的引用,以便我可以编辑它的值?

  2. 然而,更重要的是,如果我随后遵循 Apple 示例,创建一个新的NSManagedObject通过NSEntityDescription:insertNewObjectForEntity:并使用,[stockController addObject:Newly created Object]我可以在添加它之前编写我想要的值,但是与“父”股票的关系不是由该addObjects:方法设置的。我相信我也能弄清楚如何写这个,但是 Cocoa 中的其他所有东西都非常优雅,这让人感觉很奇怪,所以我希望这里的人能很快解决这个问题,并为我指出一种优雅的方式。

0 投票
1 回答
2418 浏览

cocoa - 如何通过 NSArrayController 和可可绑定获取记录计数和值聚合

我正在尝试使用 NSArrayController 和可可绑定的简单应用程序。该应用程序包含 - 一个只有一列的表格,两个按钮“+,-”用于添加和删除记录,两个文本字段用于显示输入的记录数和这些记录的总和。

为了只允许用户输入数字,我已将 NSNumberFormatter 分配给 NSTextField 单元格。

模型类:“交易”只包含一个属性:“金额”。我使用@property 和@synthesize 来声明和定义它的访问器方法。

所以总的来说,我想执行以下任务:

  1. 允许用户在表格的每一行中插入、编辑、修改数字。
  2. 显示在文本字段中输入的记录数。
  3. 显示在其他文本字段中输入的数字的汇总。

我能够达到 1 分。通过可可绑定但是当我尝试实现第二和第三点时,它没有按预期工作。

我为第二和第三点做了以下事情。

对于第 2 点.... 1. 在文本字段的绑定首选项中。我将值绑定到数组控制器。2.设置模型键路径为@count.amount

对于第 3 点.... 1. 在文本字段的绑定首选项中。我将值绑定到数组控制器。2.设置模型键路径为@sum.amount

任何人都可以建议我在哪里可能出错或以其他方式来满足我的要求吗?

谢谢,

米拉杰