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

objective-c - 为什么当我单击删除按钮而不是选中的那一行时,大纲视图底部的行会被删除?

当我在大纲视图中选择一行(连接到 NSTreeController)并单击删除按钮时,它不会删除我选择的行,但实际上会删除表格底部的行。有关更多信息,这里是我的按钮连接:

http://snapplr.com/t1hm

和实体模型:

http://snapplr.com/k6n3

如果您需要更多信息,请随时发表评论。

0 投票
2 回答
10254 浏览

objective-c - 如何通过 NSArrayController 获得模型更改的通知?

我有一个NSView绑定arrangedObjectsNSArrayController. 当数组插入或删除项目时,会通知视图。如果存储在数组中的模型的属性发生更改,如何通知它?

我是否需要将我的视图作为观察者添加到添加到数组中的每个项目的每个(相关)属性?

当一个项目被添加到数组中或从数组中删除时,我observeValueForKeyPath:ofObject:change:context:会在我的NSView子类中收到通知。我没有收到关于存储在数组中的模型的更改的通知,但是每次我收到插入通知时,我都可以将视图作为观察者添加到新项目的属性中。这是最好的方法吗?

我覆盖addObserver了模型类,以便我可以看到发生了什么,并注意到NSTableView绑定到的列arrangedObjects将自己作为观察者添加到适当的属性。这可以自动发生还是我手动设置观察?

0 投票
2 回答
1563 浏览

cocoa - Cocoa:绑定到存储在应用程序首选项中的 NSStrings 数组

好吧,我真的觉得问这个问题真的很愚蠢,但我已经设法把自己难住了,以至于我怀疑我是否有适当的超然能力来为自己找出答案。我提前道歉...

我玩绑定已经有一段时间了,我很喜欢它们。这和 Objective-C 2.0 中内置的 KVO/KVC 约定使我能够显着精简我的应用程序,同时提高它们的可靠性、灵活性等。我这样说只是为了说明我至少对绑定有一定程度的适应一般来说。话虽如此,我的问题是:

我有一个应用程序,我想通过首选项控制器存储一组可编辑的关键字。容易,对吧?不幸的是,对于我的生活,我无法弄清楚如何去做。我设置了一个数组控制器并将其指向共享首选项对象,并为它提供了数组的键路径。问题是存储在数组中的对象是 NSStrings,由于缺少任何“stringValue/setStringValue”方法,我看不出 NSStrings 如何兼容 KVC 进行这种操作。没有这些,我在设置的 NSTableView 中使用什么键路径来促进对该列表的操作?

此外,由于共享首选项对象不是我拥有的,我不确定如何设置一个新数组来表示未编辑/新安装的状态。(将它们注册为默认值似乎对我不起作用。)

因此,更简洁地重申我的问题:如何将表视图绑定到 NSStrings 数组以及如何将所述数组存储在应用程序的首选项中?

您可以提供的任何指示或建议将不胜感激。我从中得到的头痛开始变得更好。:)

0 投票
2 回答
2303 浏览

cocoa - 在 NSArrayController 中查找特定元素

我有一个包含一些元素的 NSArrayController。这些元素有一些属性,如“名称”、“信息”等。

我想要的只是在 NSArrayController 中找到一个元素,该元素的 name 属性设置为“Mads”。

由于这里的效率不是一个大问题,我只需通过迭代 NSArrayController 中的所有元素来进行线性搜索,同时检查“name”属性是否为“Mads”。

但我似乎无法从 NSArrayController 获得 NSIterator,所以我想知道是否有另一种方法可以做到这一点?

任何帮助表示赞赏

0 投票
1 回答
1346 浏览

binding - 使用过滤谓词在 NSTableView 中获取选定行索引的问题

我不确定我的措辞是否正确,但基本上我在我的主应用程序委托中执行此操作:

应用程序 *app = [[应用程序分配] initWithApplication:fullPath]

Application 类有一个 initWithApplication 方法,它接受应用程序的路径,然后设置 appPath、名称等的属性。然后我将新的“app”对象添加到应用程序 NSMutableArray:

NSArrayController 的内容数组绑定到应用程序 NSMutableArray,然后在 NSArrayController 中设置各种键(appPath、name 等)。然后我有一个表格视图,其中各种列绑定到不同的属性,例如名称的一列,路径的一列等。

然后我有一个启动按钮,用于启动在表格视图中选择的应用程序。为此,我使用以下代码:

然后我只是使用“app.appPath”作为对当前选中项的路径的引用。这工作正常。当使用 filterPredicate 过滤表视图内容时,问题就出现了。基本上,它会过滤掉表格视图中的所有应用程序,只留下名称包含在搜索框中键入的短语的应用程序。

上面的方法不起作用,因为它在 table view 中获取 item 的索引,并且由于所有 item 都不在 table view 中,所以计数被弄乱了。例如,假设我有一个名为 MyApp.app 的应用程序,它是应用程序数组索引 25 处的项目。

上面的代码运行良好,因为 tableView 和 applications 数组具有相同数量的对象。但是,过滤掉表格视图的内容会导致对象数量的差异,因此它会启动错误的应用程序。

我希望我的解释不会太混乱,但很难解释。有什么办法吗?

谢谢

0 投票
1 回答
2094 浏览

objective-c - NSCollectionView 什么也没画

我正在尝试设置一个NSCollectionView(我过去已经成功地做到了这一点,但由于某种原因这次失败了)。

我有一个名为“TestModel”的模型类,它有一个NSString只返回一个字符串的属性(现在仅用于测试目的)。然后我在我的主应用程序委托类中有一个NSMutableArray属性声明,并向这个数组添加TestModel对象的实例。

然后我有一个数组控制器,它的内容数组绑定了应用程序委托的NSMutableArray. 我可以确认到目前为止一切正常;NSLogging:

工作正常。

然后,我为集合视图设置(itemPrototype 和内容)以及集合视图项(视图)设置了所有适当的绑定。然后,我在绑定到 Collection View 的集合项视图中有一个文本字段Item.representedObject.teststring。但是,当我启动应用程序时,集合视图中没有显示任何内容,只是一个空白的白色屏幕。我错过了什么?

更新:这是我使用的代码(由 wil Shipley 要求):

然后就像我说的,Array Controller 的 content 数组绑定到这个“objectArray”,NSCollectionView 的 Content 绑定到 Array Controller.arrangedObjects。我可以通过 NSLogging [arrayController mappedObjects] 验证 Array Controller 中是否包含对象,并且它返回正确的对象。只是在 NSCollectionView 中没有显示任何内容。

更新 2:如果我记录 [collectionView 内容],我什么也得不到:

问题可能就在那里。

更新 3:这里要求的是 Xcode 项目:

http://www.mediafire.com/?mjgdzgjjfzw

它是一个菜单栏应用程序,所以它没有窗口。当您构建并运行应用程序时,您会看到一个显示“测试”的菜单栏项,这将打开包含 NSCollectionView 的视图。

谢谢

0 投票
1 回答
330 浏览

cocoa - 从阵列控制器中删除实体时如何删除它?

我在与其他两个实体(例如部门和团队)相关的托管对象模型中有一个实体(例如员工)。两种关系都是一对多的(即一个员工必须有一个部门和一个团队,团队和部门有很多员工)。两者可能重叠也可能不重叠(例如,一个团队可能由来自人力资源、会计和 IT 的员工组成,或者它可能仅由一个部门的几名员工组成)。

我有两个 NSArrayControllers 为两个 NSTableViews、一个 Department 表和一个 Team 表提供数据。员工可以在部门之间和团队之间毫无问题地移动,但我不知道如何删除(解雇)员工。

如果我向任一阵列控制器发送删除消息,则员工将被带出团队(例如)但留在部门中,并且对象图处于不一致状态。即使我在两个控制器上调用删除操作,该对象也不会被删除 - 它是孤立的,只是在边缘徘徊。

最初,我将(员工实体的)部门和团队关系设置为 Nullify 的删除规则,但即使将一个或两个更改为级联也无济于事。

我是否需要覆盖数组控制器上的 remove: 操作以实际删除员工,或者我是否遗漏了一些非常明显的东西?

0 投票
3 回答
4765 浏览

cocoa - 刷新 Cocoa-Binding - NSArrayController - ComboBox

在我的应用程序中,我做了一个非常简单的绑定。我有一个绑定到 NSArrayController 的 NSMutableArray。控制器本身绑定到一个 ComboBox 并显示 NSMutableArray 的所有内容。工作正常。

问题是:数组的内容会改变。如果用户对应用程序进行了一些调整,我会删除 NSMuteableArray 中的所有项目并用新的和不同的项目填充它。

但是 NSMutableArray <-> NSArrayController <-> NSComboBox 的绑定不会刷新。

无论我是否从 Array 中删除所有对象,ComboBox 仍然显示相同的项目。

这里有什么问题?我的方法是错误的还是我只需要告诉绑定刷新自己?我不知道该怎么做。

0 投票
3 回答
399 浏览

cocoa - 没有数组的 NSArrayController

我刚刚意识到有两种方法可以使用 NSArrayController。

将 Controller 绑定到 Array 并将对象添加到 Array。或者根本不使用任何数组,直接将对象添加到控制器。

或者

由于这两个版本都可以很好地满足我的需求,我想知道哪种方法是正确的使用方法。我想使用 Array 可能会更好,但既然 NSArrayController 也能够存储数据,为什么我不应该使用这个功能呢?

0 投票
3 回答
2824 浏览

cocoa - 什么是 Cocoa Touch 等价于 NSArrayController?

已经开始使用 Core Data,虽然我已经弄清楚如何在常规 Cocoa 应用程序中使用它,但它在 Cocoa Touch 中的工作方式似乎有点不同。在 Cocoa Touch 中,如何将实体绑定到诸如表格单元格之类的对象?