【问题标题】:Combine NSArrayController with NSTableview method "objectValueFor"结合 NSArrayController 和 NSTableview 方法 \"objectValueFor\"
【发布时间】:2022-03-17 22:11:15
【问题描述】:

我可以将 NSArrayController 用于我的 tableview,并同时使用此方法:?

func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any?

背后的想法:
我不想失去数组控制器的好处(插入、更新、删除......),但我想控制要显示的其他列。这些列中的信息经过计算和格式化;值来自数组控制器管理的数组(核心数据)。

恐怕这是不可能的,因为控制器和 tableviewfunction 相互排斥......

  • 可以将NSArrayController 与计算值结合使用。表格视图是基于单元格的还是基于视图的?
  • 您是否尝试过使用tableView(_:objectValueFor:row:)?发生了什么?
  • 它是一个基于视图的表格视图。我正在使用 Xcode 13.2.1 和 Swift。列由 objectValue.someProperty 以“oldfashioned”方式绑定
  • 是的,我尝试了 tableView(_:objectValueFor:row:) - 但它从未被调用,因为 tableview 绑定到控制器:-)
  • 另一种解决方案:将计算属性添加到扩展中的核心数据实体类。

标签: nstableview nsarraycontroller


【解决方案1】:

感谢 Willeke,我终于通过为我的实体使用扩展来完成它。

extension ImportLog {
 
    // Splits the imported lines into individual words

    // For each entity, I split the property "line" .
    // Later, in the objc computed property, I pick column number x

    var splittedText:[String.SubSequence]{
        return(self.line!.split(separator: ";"))
    }
    
    // col1
    @objc var f1: String {
        get {
            let theColumn = 0
            var text:String = ""
            if ( splittedText.count-1 >= theColumn) {
                text = String(splittedText[theColumn])
            }
            return text
        }
        set {
            // no need to set something
        }
    }
 }

实体的计算属性“f1”现在可以绑定在 XIB 文件中 通过“表格单元格 View.objectValue.f1”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多