- 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/
我不知道该怎么做... function f1() { var x = 10; function f2(fx) { var x; x = 6;
早期绑定(bind)和后期绑定(bind)有什么区别? 最佳答案 简短的回答是,早期(或静态)绑定(bind)是指编译时绑定(bind),后期(或动态)绑定(bind)是指运行时绑定(bind)(例如
如何在 SwiftUI View 上使用 Binding(get: { }, set: { }) 自定义绑定(bind)与 @Binding 属性。我已成功使用此自定义绑定(bind)与 @State
我经常发现自己遇到问题,即控件的两个(相关)值被更新,并且两者都会触发昂贵的操作,或者控件可能会暂时处于不一致的状态。 例如,考虑一个数据绑定(bind),其中两个值 (x,y) 相互减去,最终结果用
我想通过我的 ViewModel 控制我的一个窗口的高度和宽度。 这看起来很简单。 但没有。它不起作用。 它检查 ViewModel 的 Width但不是 Height . 奇怪的是,如果我切换 W
UI5中一次性绑定(bind)和单向绑定(bind)有什么区别? 是否有任何用户特定的用例我会使用它们? 我无法从文档中获得太多信息。 最佳答案 单程 它的作用:单向数据流。模型数据的变化(例如通过
(define make (lambda (x) (lambda (y) (cons x (list y))))) (let ((x 7) (p (make 4))) (cons
尽管我或多或少地了解什么是语言绑定(bind),但我很难理解它们是如何工作的。 例如,谁能解释一下如何为 WinAPI 制作 Java 绑定(bind)? 最佳答案 如果您搜索 Foreign Fun
谁能解释为什么我可以重新绑定(bind)列表但不能+? (binding [list vector] (list 1 3)) (binding [list +] (list 1 3)) (bi
我真的很喜欢 Caliburn 和命名约定绑定(bind),我很惊讶 可见性与“CanNAME”约定用于保护 Action 的方式不同。 据我所知, BooleanToVisibilityConver
我了解动态绑定(bind)的实现方式以及静态绑定(bind)和动态绑定(bind)之间的区别,但我只是无法理解动态绑定(bind)的定义。基本上它是一种运行时绑定(bind)类型。 最佳答案 基本上,
http://jsfiddle.net/3NRsd/ var foo = $("div").bind("click", function() { $("div").animate({"hei
这个问题我快疯了...我有一个用户控件,它有一个用于插入操作的 FormView 和一个用于所有其他操作的 GridView。 在这两个控件中,我都有一个 DropDownList,如下所示: '
我有一个绑定(bind)到 ListBox 的地址的 ObservableCollection。然后在 ItemTemplate 中,我使用 {Binding .} 绑定(bind)到当前地址记录。这
如果我有以下简单的 js/knockout 代码: .js( View 模型): var image = ko.observable('http://placehold.it/300x150'); 看
我正在 aurelia 上开发一个自定义属性,让用户在输入文本区域时从列表中进行选择。例如,用法将是这样的: 正如您可能注意到的,auto-complete是属性。现在,当我想显示提示时,我想在自定
我正在使用 EventEmitter2作为我的应用程序内部的消息总线。现在我需要绑定(bind)和取消绑定(bind)一些事件处理程序。因为我也希望他们bind将它们添加到给定的上下文中,我最终得到以
我有以下函数调用: $(".selector").on("click", callback.bind(this, param1, param2)); 在我的回调函数中,我想使用绑定(bind)的 th
我目前正在试验新的编译绑定(bind),并且(再次)达到了我在拼图中遗漏了一个小问题:为什么我必须调用 Bindings.Update?直到现在,我还认为实现 INotifyPropertyChang
我正在阅读一本关于编写 JavaScript 框架的书,并找到了这段代码。但是我不明白它是如何工作的,尤其是 bind.bind 的用法?有人知道吗? var bind = Function.prot
我是一名优秀的程序员,十分优秀!