2009-12-20 54 views
2

如何获取NSOutlineView中的总行数?获取NSOutlineView中的行数

+0

对不起,我的父亲但“金额”应该是“数字”,因为它是可以明确计数并用整数表示的东西。 – 2009-12-20 16:53:13

+0

从数据源获取行数是否更有意义? – Abizern 2009-12-20 16:58:06

+0

是的,我的意思是数字不是金额。 – Joshua 2009-12-20 17:27:05

回答

4

这是否包括在扩展行任何从属行?例如,如果foo包含bar,baz和qux,并且被展开,那么bar,baz和qux也是可见的行。相反,如果foo没有展开,那么bar,baz和qux不是“NSOutlineView中的行” - 它们只存在于你的模型中。

忘掉大纲视图。这是无关紧要的,并混淆了你的问题。你想知道你有多少你的模型对象,所以要问拥有它们的控制器。

人们在说“询问数据源”,因为该控制器是应该成为视图数据源的对象。但忘记大纲视图,并忘记其数据源属性。直接与控制器通话。询问它有多少个模型对象。如果你想知道答案的深层版本(你有多少东西,包括其他东西),请问这个问题。无论哪种方式,也可以在该控制器中实现一个方法来提供答案。

附录:请记住the separation of powers in Cocoa。你有一个模型,这是用户的对象形式的数据;视图,它将模型显示给用户;和拥有模型和视图的控制器。你说这不是一个与绘图有关的问题;这使得它不是一个视图的问题(“你会画多少行”),而是一个控制器的问题(“你拥有多少种类的东西>”)。因此,你需要问一个控制器。

+0

是的。这是我根据你的回答决定要做的。我已经从模型对象完成了一个获取请求,然后获得了数组的数量。这里... http://grab.by/1jKg。这是你在想什么吗?有用。 – Joshua 2009-12-21 07:41:28

+0

这不是我在想什么,但我不是一个核心数据人。据我所知,这足够接近。 (顺便说一句,不要忽略警告,这个警告很重要,它也会影响到它之前的行,它使用正确的格式化程序来处理你正在使用的类型,但错误的格式化程序应该用于你应该使用的类型。) – 2009-12-21 22:16:51

+0

Peter的讲座过于狭隘和自以为是。虽然它可能对某些受众有所帮助,但它并不回答提出的字面问题。迈克尔的答案应该足够了。了解Apple根据Michael提供的API作为API提供的当前行数对于了解NSOutlineView在做什么的开发人员来说是非常宝贵的。关于MVC的讲解不是很有帮助。 – ctpenrose 2015-03-19 21:54:42

7

有一个名为numberOfRows的方法,它返回一个NSInteger。 例如您N​​SOutlineView被称为outlineView:

NSInteger *rows = [outlineView numberOfRows]; 

文档浏览:

https://developer.apple.com/documentation/appkit/nstableview/

“通常你不应该问表视图有多少行了;相反,你应该询问表视图的数据源。 “

有一个非正式的协议,如果你在使用的tableView真的坚持,那就是:

– numberOfRowsInTableView: (NSTableDataSource informal protocol) 
+0

这是问题的正确答案 - 它返回大纲视图中可见行的数量(忽略模型中由于未展开而不可见的项目)。 – 2015-06-12 16:05:09

+0

我冒昧地将答案的文档URL指向超类NSTableView (无论如何链接都被中断),其中-numberOfRows被定义。它确实返回了NSOutlineView中可见行的数量(在10.13.3中测试过),尽管我不觉得我们100%保证了这将始终用于大纲而不是表格。 – 2018-02-10 19:02:27