问题标签 [nsoutlineview]
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.
macos - NSOutlineView 选择绑定错误
我得到了下一个情况: NSOutlineView <-> NSTreeController <-> MyClass
我将 NSTreeController 绑定到 MyClass 中的对象数组,现在我想从 NSOutlineView 中获取所选项目。为此,我声明了一个 NSMutableIndexSet 并通过“选择索引路径”绑定将其绑定到 NSTreeController 绑定如何绑定到 NSOutlineView。
每次选择一行时,我都会记录索引的描述,这是输出:“1 个索引 [3, 1]”看起来不错。
现在,我如何才能真正获得该索引的值?如果我尝试:
,例如,我得到一个'-[NSCFArray firstIndex]:无法识别的选择器发送到实例'。
谢谢
objective-c - 使用 NSTreeController/NSOutlineView 添加子对象
在我的应用程序中,与许多 Mac 应用程序一样,我有一个源列表。目前这是一个绑定到 NSTreeController 的 NSOutlineView。我可以很容易地向其中添加项目,甚至能够复制“源列表”外观,带有灰色的全大写标题和所有内容。不过,有些东西让我回避了,这让我发疯了。
如何将孩子添加到树中的特定项目?例如,假设我创建了一个名为“Cheese”的项目。我已经在 Cheese 中添加了两个孩子,分别称为“Cheddar”和“Swiss”。既然我的初始添加方法已完成运行,如何将“Longhorn Colby”添加到子列表中?
我用谷歌搜索了它,但找不到一个简单、直接的答案。不过,据我所知,它是不必要的复杂,类似于要求国会通过法案来做一些简单的事情,比如吃早餐。如果我错了,请纠正我。
更新:
我不相信我正在使用子类型。到目前为止,这是我填充树的方式:
“isSourceGroup”位用于表示该项目是大纲视图中的标题之一。
multithreading - 我应该为我的 UI 操作使用后台线程吗?
背景
我有一个
NSOutlineView
显示 TrainingGroup 实体的。每个 TrainingGroup 代表本地机器上的一个文件夹。
The
NSOutlineView
绑定到一个NSTreeController
带有 fetch 谓词的IsTrained == 0
每个 TrainingGroup 都可以分配给一个项目。
每个 TrainingGroup 都有许多 TrainingEntries 显示在该文件上工作的时间。
当 TrainingGroup 分配给一个项目时,
IsTrained
设置为YES
。在分配给项目时,所有后代也被分配给该项目,并且它们的
IsTrained
属性也设置为YES
。项目列绑定到
projectTopLevel
属性。
例子
整棵树看起来像这样:
而 NSOutlineView 只会看到这个:
如果您将电影分配给个人,则视图现在将如下所示:
代码
培训组.m
问题
正如您在上面看到的,我目前正在主线程上运行所有项目分配代码。
当每个文件夹下有数百个时间条目时,我的应用程序变得无响应。
可能的解决方案
1 模态进度条
该方法
- 在单独的上下文中在后台线程上运行项目分配。
- 完成后使用标准核心数据合并到主上下文中。
- 在项目分配完成之前,模式表会阻止任何进一步的活动。
好的
- 用户会立即获得有关正在发生的事情的反馈。
- 该应用程序保持响应。
坏的
- 在当前分配完成之前,用户不能做任何事情。
2 非模态微调器
该方法
- 在单独的上下文中在后台线程上运行项目分配。
- 完成后使用标准核心数据合并到主上下文中。
- 在训练组旁边显示进度微调器,表示它很忙。
- 完成分配后,培训组将从视图中消失。
好的
- 用户可以在处理他们的最后一个动作时做其他事情
- 该应用程序保持响应。有点。见下文。
坏的
- 在测试中,当背景上下文合并到主上下文中时,我看到最多冻结 3 秒。
- 视图可能会在用户执行其他操作时更新,这可能很烦人。
- 撤消将难以实施。
3 隐藏
该方法
- 以上,除了培训组在分配时被删除,并设置为“进行中”,直到分配完成。
好和坏
- 与上面相同,除了训练组的顺序仍然是可预测的。
- 合并回主要上下文时仍然大冻结。
4 提高性能
该方法
- 保持代码原样,在主线程上运行。
- 提高性能,即使有数千个条目,视图最多只能冻结半秒
好的
- 应用程序保持响应。
- 撤消仍然很容易。
- 建筑仍然很简单。
坏的
- 据我了解,违反 Apple 的建议 - 不应在主线程上进行密集处理
- 我能得到足够好的性能吗?未知。
我的问题
据我所知,以上选项都不是理想的。
1. 哪个是最好的选择?
2. 还有其他选择吗?
3. 我可以改进我的方法的哪些方面?
cocoa - 带有未读消息标记的 NSOutlineView,例如 Mail.app
我正在尝试创建一个类似于 iTunes 源列表或 Mail.app 邮箱列表的用户界面,其中带有数字的徽章(例如未读电子邮件、新播客)显示在元素的右侧。
基于 Apple 的 SourceList 示例,我NSOutlineView
设置了显示几个组和每个组中的一些项目。
是否有一个标准的 UI 元素来表示“徽章”,每个条目都有一个数字?我在文档中找不到任何内容。我怀疑我将不得不自己扩展NSTextFieldCell
和绘制。
有没有关于如何做到这一点的例子?
cocoa - NSOutlineView 在扩展项目时收到断言错误
看起来我的数据模型有问题,所以我在扩展项目时不时会收到这个错误。有谁知道这个断言是什么意思?
2010-10-20 03:04:47.547 test_tree[60332:613] * -NSOutlineView _expandItemEntry:expandChildren:startLevel:, /SourceCache/AppKit/AppKit-949.54/TableView.subproj/NSOutlineView.m:1003 2010-10 中的断言失败-20 03:04:47.548 test_tree[60332:613] 无效参数不满足:itemEntry->children == NULL
objective-c - 实现 NSOutlineView 来编辑 plist 文件的内容
我正在使用 cocos2d-iphone 编写游戏,我们的阶段在 .plist 文件中定义。但是,文件越来越大 - 所以我开发了一个编辑器,它为流程添加了一些结构,并将大部分 plist 分解为固定字段。但是,某些元素仍然需要 plist 编辑器类型功能,因此我在显示“其他参数”的面板上实现了 NSOutlineView。我正在尝试从 XCode 的“属性列表编辑器”复制功能。
我已经实施了以下系统;http://www.stupendous.net/archives/2009/01/11/nsoutlineview-example/
这非常接近我的需要,但是我今天大部分时间都在尝试解决一个问题。通过查找父字典并使用,从所选项目“向后”计算键列的值;
但是,当树中的给定字典中有多个具有相同值的项目时,此语句总是返回具有该值的第一个项目(它似乎使用 isEqualToString: 或哈希值比较字符串)。这导致键列显示“item1, item1, item1”而不是 item1, item2, item3(其中项目 1-3 都具有值“”)。我接下来尝试了;
但这总是返回nil。我希望对 NSOutlineView 有更多经验的人能够提供更好的解决方案。虽然这个问题在链接的例子中只出现过一次,但在从字典中删除项目时,我不得不多次使用它。任何帮助将不胜感激。
cocoa - 如何检测 NSOutlineView 的滚动?
我有两个并排显示的 NSOutlineView,它们包含相同数量的行(这是先决条件),当用户使用鼠标、键盘或滚动条滚动时,我需要同步它们,以便我看到相同的视图部分(或行)。
我是可可领域的新手,我无法找到如何实现这一点
cocoa - NSOutlineView 作为具有核心数据的源列表
我正在开发一个需要源列表的应用程序,例如在 Finder 中找到的那些。到目前为止,我已经让 Core Data 使用了一个,NSOutlineView
但组标题看起来不像源列表。一个真正的源列表组标题看起来像一个
NSOutlineView
看起来像。似乎唯一的主要区别是文本颜色和大写字母。是否可以仅更改组标题的颜色,或者是否可以使用源列表标题“主题”?
objective-c - 如何动态填充 NSOutlineView 的列?
我有一个到 NSOutlineView 的 IBOutlet,我想删除现有的列并添加新的列。
我试过这个来添加列
和
没有运气。
要删除我试过这个:
有什么帮助吗?
谢谢!
cocoa - Can NSOutlineView and NSTreeController handle thousands of objects?
Background
Core Data app on Snow Leopard 10.6.4 with GC
I've got an NSOutlineView backed by NSTreeController using bindings
I'm creating tens of objects on a background NSOperation subclass, saving and using
mergeChangesFromContextDidSaveNotification
to merge into the main context, all as recommended in the Apple docsThe main context has thousands of objects
The Problem
I've had lots of performance problems. Sometimes a merge can take a few seconds which locks up my UI. It also seems to use rather a lot of memory.
I recently found that others have had this issue too. I'm starting to think this is a restriction of the NSTreeController/NSOutlineView combination with bindings.
Questions
Can NSOutlineView and NSTreeController handle thousands of objects efficiently?
This post seemed to imply that this was an issue on 10.6.2 quoting rdar://7139579. Does anyone know if this has been "fixed"?
I'd greatly appreciate any suggestions.