我(很明显)是Swift的新手,而且我对Cocoa编程一般都很陌生。当我构建这个代码并运行它时,它会自动在NSTableView上为peopleList [0]插入一个空行,所以当我去添加一个新人时,它们会显示在第二行,而第一行仍为空。我不知道为什么会这样。我知道我可以在插入第一行数据之前以编程方式删除空行,但如果可能的话,我想知道这个的根本原因。
这是我的代码:
import Cocoa
class AppDelegate: NSObject, NSApplicationDelegate, NSTableViewDataSource, NSTableViewDelegate {
@IBOutlet var window: NSWindow
// Table View Outlet
@IBOutlet var tableViewData : NSTableView
// Text Field Cell Outlets
@IBOutlet var firstNameTextField : NSTextField
@IBOutlet var lastNameTextField : NSTextField
@IBOutlet var ageTextField : NSTextField
@IBOutlet var netWorthTextField : NSTextField
// declare an array of multiple dictionaries
var peopleList = [Dictionary <String, String>()]
func applicationDidFinishLaunching(aNotification: NSNotification?) {
// Insert code here to initialize your application
}
func applicationWillTerminate(aNotification: NSNotification?) {
// Insert code here to tear down your application
}
func numberOfRowsInTableView(aTableView: NSTableView!) -> Int
{
let numberOfRows:Int = getDataArray().count
return numberOfRows
}
func tableView(tableView: NSTableView!, objectValueForTableColumn tableColumn: NSTableColumn!, row: Int) -> AnyObject!
{
var newString = getDataArray().objectAtIndex(row).objectForKey(tableColumn.identifier)
return newString;
}
func getDataArray() -> NSArray {
return peopleList
}
// When button is hit, add NSTextField values to array and refresh the tableview
@IBAction func addFieldDataToArray(sender : AnyObject) {
peopleList.append(["FirstName": firstNameTextField.stringValue, "LastName": lastNameTextField.stringValue, "Age": ageTextField.stringValue, "NetWorth": netWorthTextField.stringValue])
println(peopleList)
tableViewData.reloadData()
}
}
答案 0 :(得分:2)
这种情况正在发生,因为您正在初始化并附加到peopleList
。初始化时,peopleList
是Dictionary<String, String>
的数组,包含一个空字典:
> var peopleList = [Dictionary <String, String>()]
[[String : String]] = 1 value {
[0] = {}
}
添加一个人后,它看起来像这样 - 你已经附加了一个新人的信息,但那个空的初始字典仍在那里。
[[String : String]] = 2 values {
[0] = {}
[1] = {
[0] = {
key = "NetWorth"
value = "About 10 bucks"
}
[1] = {
key = "LastName"
value = "Schmoe"
}
[2] = {
key = "Age"
value = "37"
}
[3] = {
key = "FirstName"
value = "Joe"
}
}
}
我建议首先使用peopleList
完全为空 - 不要担心空行:
> var peopleList: [Dictionary<String, String>] = []
[[String : String]] = 0 values