2014-09-29 62 views
0

NSTableViewDataSource方法顯示布爾作爲真/假,而不是1/0在NSTableView的

func tableView(tableView: NSTableView!, objectValueForTableColumn tableColumn: NSTableColumn!, row: Int) -> AnyObject! 

的實現中,一列中的返回的結果是一個本機夫特Bool -typed值。我預計它會在表格視圖中顯示爲truefalse。但是,它實際上顯示爲10。我猜它可能已被鑄造成AnyObject併成爲Obj-C對象。在表格視圖中顯示爲truefalse的簡單方法是什麼?

+2

實現自定義格式(NSFormatter)並將其設置爲表列的textFieldCell。您也可以使用NSButtonCell顯示覆選框而不是真/假。 – user3125367 2014-09-29 02:43:49

回答

0

Objective-C Bool類型實際上是一個signed char下的封面。

objc.h:typedef signed char BOOL; 
objc.h:#define YES    ((BOOL)1) 
objc.h:#define NO    ((BOOL)0) 

所以,當你回到這個作爲一個對象,你居然回來的東西,被強制轉換爲NSInteger的,這就是爲什麼它呈現出01

爲了解決這個問題,修改對象的方法返回

return theBoolValue ? @"true" : @"false" 
+0

但我怎麼知道它是否是一個真正的布爾價值?我不想爲整數類型值爲1的其他列顯示「true」。 – Ethan 2014-09-29 02:05:05

+0

如果可能,數據源應該按原樣返回值。它是格式化程序和/或值轉換器的工作,用於格式化/轉換單元格中的值 – user3125367 2014-09-29 02:38:26

+0

愚蠢的做法 - 在Cocoa Universe中,這是'NSValueTransformer' – cacau 2014-09-29 08:20:56

相關問題