我正在尝试使用带有两列的tableView构建一个应用程序(一个显示字符串,另一个显示每个字符串的CheckBox)。 字符串来自[AnyObject]变量。 我已经尝试了很多东西将[AnyObject]的结果插入到NsMutableDictionnary(由NsTableView使用)中,但它们都不起作用。 我必须使用正确数量的对象(与[AnyObject]的结果相关)手动构建dic以使其工作,但我希望dic能够自动构建。
以下是代码的示例,如果[AnyObject]由4个元素组成,则可以正常工作。 TableView列名是" jobs"和"卸载" :
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate,NSTableViewDataSource,NSTableViewDelegate {
@IBOutlet weak var window: NSWindow!
@IBOutlet weak var myTableView: NSTableView!
var dataArray:[NSMutableDictionary] = [["jobs": "", "unload": 0],["jobs": "", "unload": 0],["jobs": "", "unload": 0],["jobs": "", "unload": 0]];
func applicationDidFinishLaunching(aNotification: NSNotification) {
...
...
...
var ctlelems:[AnyObject] = grepOut!.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
dataArray = [["jobs": "ctlelems[0]", "unload": 0],["jobs": "ctlelems[1]", "unload": 0],["jobs": "ctlelems[2]", "unload": 0],["jobs": "ctlelems[3]", "unload": 0]];
}
func applicationWillTerminate(aNotification: NSNotification) {
}
func numberOfRowsInTableView(aTableView: NSTableView) -> Int
{
return dataArray.count
}
func tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int) -> AnyObject?
{
let object = dataArray[row] as NSMutableDictionary
if ((tableColumn!.identifier) == "unload")
{
println(object)
return object[tableColumn!.identifier] as? Int!
}
else
{
return object[tableColumn!.identifier] as? String!
}
}
func tableView(tableView: NSTableView, setObjectValue object: AnyObject?, forTableColumn tableColumn: NSTableColumn?, row: Int)
{
dataArray[row].setObject(object!, forKey: (tableColumn?.identifier)!)
}
}
我想做以下事情,
var x: Int = 0
for lines in ctlelems {
dataArray = [["jobs": ctlelems[x], "unload": 0]];
x=x+1
}
但它不起作用。 大部分时间我都会找到"发现nill"错误,或仅显示[AnyObject]的最后一个元素。 有人可以帮帮我吗?
答案 0 :(得分:0)
dataArray = [["jobs": ctlelems[x], "unload": 0]];
这意味着您需要在每次迭代时重新定义dataArray
。您应该改为dataArray
。
声明并初始化您的dataArray
:
var dataArray = [Dictionary<String, Any>]()
并追加:
for line in ctlelems {
dataArray.append(["jobs": line, "unload": 0])
}
或以更加迅速的方式:
dataArray = ctlelems.map { ["jobs": $0, "unload": 0] }