2009-12-20 45 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