- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个 NSTableView,它当前正在使用一个 NSArrayController,它从 Core Data 中提取数据。从两个不同的数据源(第一个是本地核心数据,第二个是远程 Web 服务调用)流行 TableView 的最佳方式是什么。
我想要实现的是聚光灯样式结果表,当用户键入时,该表将显示来自核心数据的即时本地匹配项和来自远程 Web 服务调用的远程匹配项。
我是 Cocoa 新手,并且有 iOS 背景,所以 NSArrayController 对我来说是新的。
子类化 NSArrayController 是否可能,我是否可以以某种方式实现这一点,或者是否有更传统的方法仅使用 NSTableView.datasource 协议(protocol)并将其全部粘合在 View Controller 中。
最佳答案
NSArrayController
只是一个方便的 Controller ,它观察某些数组的变化并更新 UI(反之亦然)。您真正要问的是“如何创建从核心数据存储以及外部源检索的匹配项的组合数组?”。当你这样说时,解决方案就变得更加明显了。
虽然对于简单的情况来说很方便,但是一旦你走出“简单”的范围,直接连接到获取请求的 NSArrayController
就相当愚蠢了。现在让我们忽略数组 Controller ,因为这实际上是两个独立的问题(管理从两个不同源构建的集合,以及使用带有数组的数组 Controller 或您自己管理的集合与表数据源)。
假设您在某个 Controller 上有一个名为 results
的属性作为 NSMutableArray
。为了构建结果,您将结合两个操作:1) 自己创建并执行 NSFetchRequest
,2) 创建并执行一些网络操作。我不会详细介绍这两个操作中的任何一个,因为关于这些方法有很多有值(value)的信息来源,但实际上就像将两组结果组合到 results
数组中一样简单.
至于数组 Controller (如果这是您想要的方式),它所做的只是提供一种简单的方法来使用 Cocoa Bindings 通过 Controller (本身)将您的 UI 绑定(bind)到您的模型( results
数组)。就是这样。它有两种模式:通过针对托管对象上下文执行的获取请求来管理指定类的集合(在本例中为 NSMutableArray
)和托管对象模型中实体实例的集合(即“核心数据模式”) )。由于您打算自己管理集合,因此“核心数据模式”不适合您。您希望将其配置为管理可变数组,而不使用实体/MOC/获取请求(因为您将自己管理该位)。诀窍是避免“在数组 Controller 背后更改数组”,并确保通过数组 Controller 的方法向数组添加对象或从数组中删除对象,以便它知道数组的内容已更改并可以相应地更新/排序/等。
但是,正如您所怀疑的,您也可以完全跳过阵列 Controller ,只使用 NSTableViewDataSource
协议(protocol)。这种方法不仅没有任何问题,而且在处理像您这样的自定义案例时,它实际上在很多方面都更优越。当然,您必须管理选择更改(通过 NSTableViewDelegate
协议(protocol))以及维护排序,但当您考虑对集合的控制级别时,这些都是相当琐碎的事情。您甚至可以轻松管理集合中的“组标题”标记,并使用适当的委托(delegate)方法,使用漂亮的 float 标题行将表中的“本地”与“远程”分开。
我希望这会有所帮助。
关于cocoa - 将 NSTableView 绑定(bind)到两个不同数据源的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29695274/
我有一个 foo 类,它有一个 bar 方法,它接受可调用的东西(函数指针/仿函数)。这个可调用的东西应该作为绑定(bind)元素传递给另一个方法 doit 和第三个方法 bar_cb 方法。 #in
我正在尝试在我的 WPF 4.0 应用程序(使用 VS 2010 Pro RTM)中创建自定义 TabItem 模板/样式,但尽管一切似乎都正常工作,但我注意到跟踪窗口中存在绑定(bind)错误。 我
作为一名刚接触 Android 的开发人员,我想我可能误解了绑定(bind)服务。 我创建了一项服务来结束对服务器的访问。作为此服务的一部分,该服务正在监听多播地址,以识别本地网络上的设备何时出现和消
这个问题在这里已经有了答案: What is the use of the JavaScript 'bind' method? (23 个回答) 关闭 7 年前。 所以我一直在尝试了解一些 JS 上
我不明白这三种语法之间的区别: where a = f (b) do a <- f (b) do let a = f (b) 我确实明白了a <- f(b)与其他两个不同,在大多数情况下,我尝试了所有
我在将 Cocoa 项目从手动同步接口(interface)模型转换为绑定(bind)模型时遇到问题,这样我就不必担心接口(interface)粘合代码。 我关注了 CocoaDevCentral C
我正在尝试找出一种好的方法来对处理大数据集的代码进行并行化,然后将结果数据导入 RavenDb。 数据处理受 CPU 限制和数据库导入 IO 限制。 我正在寻找一种解决方案,以对 Environmen
我正在 foreach 循环中生成单选按钮。我试图将选中的属性绑定(bind)到父级中的基本可观察值。不幸的是,当单击单选按钮时,父级的属性似乎没有在单击处理程序中更新。 基于一些previous w
在我的 Windows Phone 应用程序中,我有两个 LongListSelectors并排在页面上。我想做到这一点,以便当用户滚动其中一个时,另一个滚动相同的量。 两个 LongListSele
我在网上看到这个问题准备面试: Given a non-preemptive kernel which type of process will get affected morein terms o
我有一个 foreach 绑定(bind),如下所示: Summary Permitting 原因是有两个选项卡始终存在,并且我根据是否添加了其他选项卡来添加其他选项
任何人都有绑定(bind)相同的情况DataContext到 TextBlock 中的 Text 属性(例如)。 我必须分配 DataContext以我的风格反射(reflect)基于 Datacon
给定以下代码: Login 和下面的javascript $(function () { $('#btnLogin').click(function () { co
我使用 boost::asio 创建了一个服务器。我在绑定(bind)到端点时遇到问题。所以,如果我在构造函数中初始化一个接受器: Server::Server(QWidget *parent) :
我正在将现有项目从 MySQL 转换为 Postgres。代码中有相当多的原始 SQL 文字使用 ? 作为占位符,例如 SELECT id FROM users WHERE
似乎在绑定(bind)某些数据时出错了,有人可以帮我解决我哪里出错了,尽管我无法弄清楚。 真的不需要在这里显示太多,这是 Binding,我已经通过移除背景并在其中放置颜色来测试背景,效果很好。 编辑
我正在尝试使用 wcf 构建一个 http 监听器(web 服务)。这个监听器是一个更大的桌面应用程序的一部分。此桌面应用程序还会调用 http 监听器。 当监听器接收到数据时,它应该被传递到桌面应用
嘿嘿。 我正在使用 Node.JS 和 child_process 来生成 bash 进程。我试图了解我是否正在执行 I/O 绑定(bind)、CPU 绑定(bind)或两者兼而有之。 我正在使用 p
尝试执行以下操作并出现“Got interpolation ({{}}) where expression was expected”错误。 {{item.name}} 谢谢!
我有一个导入的 Java 库,它是我解决方案中的“绑定(bind)库”项目。 我正在尝试从解决方案中的另一个项目绑定(bind)到第 3 方库中的服务。 第 3 方库文档 [在 java 中] 非常简
我是一名优秀的程序员,十分优秀!