问题标签 [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.

0 投票
1 回答
367 浏览

macos - NSOutlineView 选择绑定错误

我得到了下一个情况: NSOutlineView <-> NSTreeController <-> MyClass

我将 NSTreeController 绑定到 MyClass 中的对象数组,现在我想从 NSOutlineView 中获取所选项目。为此,我声明了一个 NSMutableIndexSet 并通过“选择索引路径”绑定将其绑定到 NSTreeController 绑定如何绑定到 NSOutlineView。

每次选择一行时,我都会记录索引的描述,这是输出:“1 个索引 [3, 1]”看起来不错。

现在,我如何才能真正获得该索引的值?如果我尝试:

,例如,我得到一个'-[NSCFArray firstIndex]:无法识别的选择器发送到实例'。

谢谢

0 投票
2 回答
2105 浏览

objective-c - 使用 NSTreeController/NSOutlineView 添加子对象

在我的应用程序中,与许多 Mac 应用程序一样,我有一个源列表。目前这是一个绑定到 NSTreeController 的 NSOutlineView。我可以很容易地向其中添加项目,甚至能够复制“源列表”外观,带有灰色的全大写标题和所有内容。不过,有些东西让我回避了,这让我发疯了。

如何将孩子添加到树中的特定项目?例如,假设我创建了一个名为“Cheese”的项目。我已经在 Cheese 中添加了两个孩子,分别称为“Cheddar”和“Swiss”。既然我的初始添加方法已完成运行,如何将“Longhorn Colby”添加到子列表中?

我用谷歌搜索了它,但找不到一个简单、直接的答案。不过,据我所知,它是不必要的复杂,类似于要求国会通过法案来做一些简单的事情,比如吃早餐。如果我错了,请纠正我。

更新:

我不相信我正在使用子类型。到目前为止,这是我填充树的方式:

“isSourceGroup”位用于表示该项目是大纲视图中的标题之一。

0 投票
1 回答
145 浏览

multithreading - 我应该为我的 UI 操作使用后台线程吗?

背景

  • 我有一个NSOutlineView显示 TrainingGroup 实体的。

  • 每个 TrainingGroup 代表本地机器上的一个文件夹。

  • TheNSOutlineView绑定到一个NSTreeController带有 fetch 谓词的IsTrained == 0

  • 每个 TrainingGroup 都可以分配给一个项目。

  • 每个 TrainingGroup 都有许多 TrainingEntries 显示在该文件上工作的时间。

  • 当 TrainingGroup 分配给一个项目时,IsTrained设置为YES

  • 在分配给项目时,所有后代也被分配给该项目,并且它们的IsTrained属性也设置为YES

  • 项目列绑定到projectTopLevel属性。

例子

整棵树看起来像这样:

而 NSOutlineView 只会看到这个:

如果您将电影分配给个人,则视图现在将如下所示:

代码

培训组.m

问题

正如您在上面看到的,我目前正在主线程上运行所有项目分配代码。

当每个文件夹下有数百个时间条目时,我的应用程序变得无响应。

可能的解决方案

1 模态进度条

该方法

  • 在单独的上下文中在后台线程上运行项目分配。
  • 完成后使用标准核心数据合并到主上下文中。
  • 在项目分配完成之前,模式表会阻止任何进一步的活动。

好的

  • 用户会立即获得有关正在发生的事情的反馈。
  • 该应用程序保持响应。

坏的

  • 在当前分配完成之前,用户不能做任何事情。

2 非模态微调器

该方法

  • 在单独的上下文中在后台线程上运行项目分配。
  • 完成后使用标准核心数据合并到主上下文中。
  • 在训练组旁边显示进度微调器,表示它很忙。
  • 完成分配后,培训组将从视图中消失。

好的

  • 用户可以在处理他们的最后一个动作时做其他事情
  • 该应用程序保持响应。有点。见下文。

坏的

  • 在测试中,当背景上下文合并到主上下文中时,我看到最多冻结 3 秒。
  • 视图可能会在用户执行其他操作时更新,这可能很烦人。
  • 撤消将难以实施。

3 隐藏

该方法

  • 以上,除了培训组在分配时被删除,并设置为“进行中”,直到分配完成。

好和坏

  • 与上面相同,除了训练组的顺序仍然是可预测的。
  • 合并回主要上下文时仍然大冻结。

4 提高性能

该方法

  • 保持代码原样,在主线程上运行。
  • 提高性能,即使有数千个条目,视图最多只能冻结半秒

好的

  • 应用程序保持响应。
  • 撤消仍然很容易。
  • 建筑仍然很简单。

坏的

  • 据我了解,违反 Apple 的建议 - 不应在主线程上进行密集处理
  • 我能得到足够好的性能吗?未知。

我的问题

据我所知,以上选项都不是理想的。

1. 哪个是最好的选择?

2. 还有其他选择吗?

3. 我可以改进我的方法的哪些方面?

0 投票
3 回答
1147 浏览

cocoa - 带有未读消息标记的 NSOutlineView,例如 Mail.app

我正在尝试创建一个类似于 iTunes 源列表或 Mail.app 邮箱列表的用户界面,其中带有数字的徽章(例如未读电子邮件、新播客)显示在元素的右侧。

基于 Apple 的 SourceList 示例,我NSOutlineView设置了显示几个组和每个组中的一些项目。

是否有一个标准的 UI 元素来表示“徽章”,每个条目都有一个数字?我在文档中找不到任何内容。我怀疑我将不得不自己扩展NSTextFieldCell和绘制。

有没有关于如何做到这一点的例子?

0 投票
1 回答
199 浏览

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

0 投票
2 回答
1112 浏览

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 有更多经验的人能够提供更好的解决方案。虽然这个问题在链接的例子中只出现过一次,但在从字典中删除项目时,我不得不多次使用它。任何帮助将不胜感激。

0 投票
1 回答
1126 浏览

cocoa - 如何检测 NSOutlineView 的滚动?

我有两个并排显示的 NSOutlineView,它们包含相同数量的行(这是先决条件),当用户使用鼠标、键盘或滚动条滚动时,我需要同步它们,以便我看到相同的视图部分(或行)。

我是可可领域的新手,我无法找到如何实现这一点

0 投票
2 回答
2881 浏览

cocoa - NSOutlineView 作为具有核心数据的源列表

我正在开发一个需要源列表的应用程序,例如在 Finder 中找到的那些。到目前为止,我已经让 Core Data 使用了一个,NSOutlineView但组标题看起来不像源列表。一个真正的源列表组标题看起来像替代文字一个NSOutlineView看起来像替代文字。似乎唯一的主要区别是文本颜色和大写字母。是否可以仅更改组标题的颜色,或者是否可以使用源列表标题“主题”?

0 投票
1 回答
1078 浏览

objective-c - 如何动态填充 NSOutlineView 的列?

我有一个到 NSOutlineView 的 IBOutlet,我想删除现有的列并添加新的列。

我试过这个来添加列

没有运气。

要删除我试过这个:

有什么帮助吗?

谢谢!

0 投票
1 回答
492 浏览

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 docs

  • The 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

  1. Can NSOutlineView and NSTreeController handle thousands of objects efficiently?

  2. 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.