【问题标题】:Insert [AnyObject] into [NSMutableDictionary]将 [AnyObject] 插入 [NSMutableDictionary]
【发布时间】:2015-07-07 22:04:30
【问题描述】:

我正在尝试使用带有两列的 tableView 构建应用程序(一列显示字符串,另一列显示每个字符串的 CheckBox)。 字符串来自 [AnyObject] 变量。 我尝试了很多方法将 [AnyObject] 的结果插入到 NsMutableDictionnary(由 NsTableView 使用)中,但它们都不起作用。 我必须使用正确数量的对象(与 [AnyObject] 的结果相关)手动构建 dic 以使其工作,但我希望 dic 自动构建自身。

这是一个代码示例,如果 [AnyObject] 由 4 个元素组成,则可以正常工作。 TableView 列名是“jobs”和“unload”:

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
        }

但它不起作用。 大多数时候我得到“Found nill”错误,或者只显示 [AnyObject] 的最后一个元素。 有人可以帮帮我吗?

【问题讨论】:

    标签: swift cocoa nstableview


    【解决方案1】:
    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] }
    

    【讨论】:

    • 感谢您提供这个有用的答案。 dataArray 现在包含所有记录(我使用了第一个示例)。但是“println(object)”只显示了一条带有空字段的记录::{ jobs = "";卸载 = 0; }。我不知道 dic 是否声明正确:var dataArray:[NSMutableDictionary] = [["jobs": "", "unload": 0]];。它是否正确?为什么“对象”是空的?
    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多