首页 > 解决方案 > 如何在使用 Xcode 12 的 macOS 程序的 Tableview 中为 NSComboBoxCell 编码数据源?

问题描述

我有一个带有 tableView 的测试应用程序,该应用程序对 Xcode 12 中的一列有一个 comboBoxCell:

The view controller code is as follows:

//
//  ViewController.swift
//  ComboBoxExample
//
//

import Cocoa

class ViewController: NSViewController, NSComboBoxCellDataSource {
    var states = ["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware",
                  "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky",
                  "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi",
                  "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico",
                  "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania",
                  "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont",
                  "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"]
    // var itemCombo: NSComboBoxCellDataSource? = states
    @IBOutlet weak var itemComboCell: NSComboBoxCell!
    override func viewDidLoad() {
        super.viewDidLoad()
       
        itemComboCell.usesDataSource = true
        itemComboCell.dataSource = self
        self.itemComboCell.completes = true
        // Do any additional setup after loading the view.
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }
    func numberOfItemsInComboBoxCell(in comboBoxCell: NSComboBoxCell) -> Int {
      // anArray is an Array variable containing the objects
        return states.count
    }
    func comboBoxCell(_ comboBoxCell: NSComboBoxCell, objectValueForItemAt index: Int) -> Any {
        return (states[index])
    }

}

运行示例时出现以下错误:2021-03-05 15:16:29.940373-0600 ComboBoxExample[40515:1914724] *** 非法 NSComboBoxCell 数据源 (<ComboBoxExample.ViewController: 0x600000e501b0>)。必须实现 numberOfItemsInComboBoxCell: 和 comboBoxCell:objectValueForItemAtIndex:

尝试使用以下内容设置数据源我做错了什么: itemComboCell.dataSource = self

谢谢

下面是这个测试应用程序的故事板的图像。

在此处输入图像描述

标签: macosappkit

解决方案


Objective-C

- (NSInteger)numberOfItemsInComboBoxCell:(NSComboBoxCell *)comboBoxCell;

在斯威夫特

optional func numberOfItems(in comboBoxCell: NSComboBoxCell) -> Int

来源:numberOfItemsInComboBoxCell


推荐阅读