问题标签 [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.
objective-c - 绑定到 NSDictionary 的“allValues”数组
我对绑定有误解吗?我将(NSArrayController 的内容)绑定到 NSDictionary 的“allValues”数组,它认为它是空的。我用一个属性绑定到一个随机对象,该属性我设置为同一个 NSDictionary 的“allValues”数组,它工作正常。
这是预期的行为,还是我做错了什么?此外,如果这是预期的,那么处理这个问题的标准方法是什么?制作相对无目的的对象只是为了在属性中保存数组以便我可以绑定到它们看起来很难看。
cocoa - 将数组控制器绑定到“派生”属性 - KVO 问题?
对不起笨拙的标题。
想象一个简单的 UI 来显示一个人孩子的名字......
因为我最初只有一个人,所以我创建了一个数组控制器并将其绑定到 appDelegate.person1.children - 这很好,绑定表列以显示名字也是如此。
但是,我已经扩展了我的程序,以便在 AppDelegate 中维护一个数组或人员而不是“person1”。我想我可以简单地保留 person1 属性,并使用它返回列表中的第一项:
我已确认所有内容均已正确创建(在运行时),但我无法让绑定表列显示 person1 孩子的名字。
与KVO有关吗?我如何确保表格知道当 people 数组更改时, person1 会更改(因此 UI 也会更改)?
谢谢
core-data - 在单个窗口界面中跨多个视图控制器绑定选择
我在思考如何在两个视图控制器之间连接几个 NSArrayControllers 时遇到了问题。我想同步源列表视图中的选择以更新第二个详细视图控制器中的值。
我使用Cocoa Dev Central Build A Core Data Tutorial作为起点,但是已经分解了架构,因此有一个包含两个 NSViewControllers 的 NSWindowController:一个用于左侧的帖子表,一个用于帖子的详细信息正确的。
NSWindowController 子类有一个绑定到 Post 实体的 NSArrayController 和一个只读的 managedObjectContext 访问器,它指向[[NSApp delegate] managedObjectContext]
然后我在方法中初始化两个视图控制器windowDidLoad
。
MDVCPostsListViewController
有一个 NSArrayController 绑定到 Post 实体,它的托管对象上下文绑定到父窗口控制器的托管对象上下文(全部通过 Interface Builder)
MDVCPostDetailViewController
有一个 NSObjectController 绑定到窗口控制器的托管对象上下文,并且内容对象通过postsListsViewController.postsArrayController.selection
. 这似乎是一个非常糟糕的黑客攻击。
我怎样才能得到它,以便更改MDVCPostsListViewController
表视图中的选择将更新中的选定值MDVCPostDetailViewController
?我觉得我很接近,但不确定缺少什么或最佳路线是什么。我确实觉得postsListsViewController.postsArrayController.selection
绑定非常hacky。希望有更好的方法。
我已经上传了我的示例项目,它为那些喜欢查看代码而不仅仅是阅读描述的人展示了这一点。您可以从我的网站http://www.secondgearsoftware.com/attachments/stackoverflow_objectcontroller.zip获取它
objective-c - NSArrayController 上的 setSelectsInsertedObjects 实际上没有选择
我有一个 NSArrayController 绑定到 NSUserDefaults 控制器,在 Interface Builder 中将 setSelectsInsertedObjects 设置为 YES,但是当我单击添加时,先前选择的对象被取消选择,而不是选择新添加的对象。
我错过了什么?
cocoa - 如何使用 Core Data 将 iTunes 样式源列表绑定到 NSTableView?
我的应用程序中有一个 iTunes 风格的界面:左侧的源列表 (NSOutlineView) 包含不同的库和播放列表,界面右侧的 NSTableView 显示“演示文稿”的信息。与 iTunes 类似,无论选择库还是播放列表(标题、作者、创建日期等),我都会在表格视图中显示相同类型的信息。
我目前有一个 NSArrayController 连接到我的 NSTableView 并根据源列表中选择的内容设置获取谓词。这在选择库时可以正常工作,因为我可以将获取谓词设置为按我的Presentation Core Data 实体中的“类型”字段进行过滤。但是,当我尝试调整播放列表的提取谓词时,似乎没有任何方法可以设置提取谓词,因为我在播放列表和演示文稿之间有一个表格来跟上播放列表中的顺序。根据 Apple 文档,这些类型的谓词不适用于 Core Data(它基本上没有多个内连接)。以下是我的数据模型的相关部分。
我的数据模型设置不正确吗?我应该放弃 NSArrayController 并手动处理连接 NSTableView 吗?我试图弄清楚是否有一个简单的修复,或者真的是一个设计缺陷。
cocoa - NSTableView,NSArrayController 和仅在按键后重新加载?
我有以下情况:
- 在包含 NSTableView 的第一个窗口内有一个自定义视图。
- 在第一个窗口内选择表视图之后,有第二个窗口充当当前对象的表单。
更多细节:
- 我已经在 NSTableView 中实现了 setDoubleAction: 行为,它基本上打开了第二个窗口
- 表视图绑定到(子类)NSArrayController 的排列对象
- 第二个窗口(双击打开)中的特定界面元素绑定到 NSArrayController 的选择
- 我将 NSArrayController 子类化并修改了以下函数:
一开始我改变了addObject:(或者add:,这并不重要):
然后我改变了删除:
- 打开首选项表的操作只是一个衬里:
[NSApp beginSheet:preferenceWindow modalForWindow:[_preferenceView window] modalDelegate:nil didEndSelector:NULL contextInfo:NULL];
- 用户按下返回键/确定按钮后执行的代码也不复杂。
它只是将阵列控制器的当前内容保存到磁盘并关闭第二个窗口:
最后这是我的问题/问题
当我在第二个窗口中按下返回键时,窗口关闭,数据被保存,NSTableView 被正确重新加载,无需任何进一步的交互。但是当我用鼠标按下 OK 按钮时,似乎什么也没有发生。这是有趣的部分:当我现在在第二个窗口消失后在第一个窗口的表视图中选择另一行时,之前选择的行(读取:更新的对象)会正确重新加载并显示我在第二个窗口中编辑的内容具有绑定到选择的界面元素的窗口。
基本上我的实现工作,但不是当用户使用鼠标关闭窗口时。
我能发现的唯一区别是 currentEvent,但我无法想象这会如何改变这个简单应用程序的行为。
- 当我用鼠标按下 OK 按钮时:
NSEvent: type=LMouseUp loc=(563.055,30.1484) time=58450.2 flags=0 win=0x0 winNum=5371 ctxt=0x0 evNum=8093 click=1 buttonNumber=0 pressure=0 subtype=NSTabletPointEventSubtype deviceID=0 x=19469 y=15838 z=0 buttons=0x0 pressure=0.000000 tilt={0.453108, -0.140629} rotation=0.000000 tangentialPressure=0.000000 vendor1-3=(0, 0, 0)
- 当我按下回车键时:
NSEvent: type=KeyDown loc=(0,300) time=58474.8 flags=0 win=0x0 winNum=5371 ctxt=0x0 chars=" " unmodchars=" " repeat=0 keyCode=36
有什么想法可以解决我的问题吗?
objective-c - 拥有多个不同内容的 NSTableView - 不显示数据
我有两个 TableView(一个 SourceList 和一个 Normal TableView)。我没有使用 ArrayControllers,只是使用:
这显示行内容。但问题是我不仅有一个 TableView - 我还有不止一个。所以我在里面添加了另一个带有这个代码的 NSObject。但内容不会显示。
我必须使用 ArrayControllers 吗?或者我可以用另一种方式显示第二个 TableView 的内容吗?
core-data - 使用 Core Data 在实体中插入和修改记录
我试图在互联网上找到我的问题的答案,但我找不到。我在核心数据中有一个简单的实体,它有一个 Value 属性(即整数)和一个 Date 属性。我想在我的 .m 文件中定义两种方法。
第一种方法是 ADD 方法。它有两个参数:一个整数值(由用户在 UI 中输入)和一个日期(默认为当前日期)。然后根据参数将记录插入到实体中。
第二种方法类似于增量方法。它使用 Date 作为键来查找记录,然后增加该记录的整数值。
我不知道如何编写这些方法。(假设我们有一个用于 xib 文件中的表的数组控制器)
cocoa - 使用字符串值填充 NSPopUpButtonCell
我正在尝试使用字符串列表填充 NSPopUpButtonCell。在 -(init) 中,我使用 PopUp Button 中所需的值填充 NSArray。如何将它连接到我在 IB 中添加的 NSArrayController?我的应用程序委托需要一个 IBOutlet NSArrayController 来连接还是有办法绑定它?
另外,当我将 NSArrayController 绑定到 NSPopUpButtonCell 时,我将它绑定到哪个内容?内容还是内容价值?
乔吉
objective-c - 在 NSTableView 的自定义 NSCell 中使用绑定公开模型对象
我正在努力尝试执行我认为相对常见的任务。我有一个NSTableView
通过NSArrayController
. 数组控制器将其内容设置为NSMutableArray
包含一个或多个NSObject
模型类实例的 。我不知道该怎么做NSCell
是以绑定友好的方式在子类中公开模型。
为了说明的目的,我们将说对象模型是一个由名字、姓氏、年龄和性别组成的人。因此,模型将如下所示:
显然,适合该类的 setter、getter init 等。
在我的控制器类中,我定义了一个NSTableView
,NSMutableArray
和一个NSArrayController
:
使用 Interface Builder,我可以轻松地将模型绑定到适当的列:
myPersonArray --> myPersonArrayController --> table column binding
这工作正常。所以我删除了额外的列,留下一个隐藏的绑定到的列NSArrayController
(这会创建并保持每一行和 之间的关联NSArrayController
),这样我就可以在我的NSTableView
和一个隐藏的列中找到一个可见的列。我创建一个NSCell
子类并放置适当的绘图方法来创建单元格。在我的awakeFromNib
我建立自定义NSCell
子类:
从绘图的角度来看,这也可以正常工作。我让我的自定义单元格显示在列中,并且它对我的数组控制器中的每个托管对象重复。如果我从数组控制器中添加对象或删除对象,则表会相应更新。
但是......我的印象是我的PersonModel
对象可以从我的NSCell
子类中获得。但我不知道怎么去。我不想NSCell
使用 setter 和 getter 来设置每个,因为那样我通过将数据存储在NSCell
而不是从数组控制器中引用它来打破整个模型概念。
是的,我确实需要自定义NSCell
,因此不能选择多列。从这里到哪里?
除了 Google 和 StackOverflow 搜索之外,我还对 Apple 的文档进行了强制浏览,但似乎没有找到答案。我发现了很多绕圈子但没有涉及到NSArrayController
. 当绑定到模型实体的其他元素(例如主/细节场景)时,控制器使生活变得非常容易。我在使用 Core Data 时也发现了很多参考资料(虽然没有答案),但我没有使用 Core Data。
按照惯例,我非常感谢可以提供的任何帮助!