在Swift中将领域数据加载到Xib TableView中

时间:2019-02-27 09:36:55

标签: swift macos cocoa realm xib

我目前在将领域数据加载到xib tableView中时遇到困难。我有一个xib文件,NSView和NSViewController。单元格被加载到视图中,并返回正确数量的单元格。似乎好像没有加载我的领域数据。我有一个边栏,当您单击日期时,它将特定数据加载到detailViewController中。我正在设置打印功能,这就是为什么我使用xib文件的原因。我的Xib文件的所有者是SlipsPrintView,其tableCellIdentifier是“ SlipsTableCellView”。我所需要知道的是,当我单击masterViewController单元时,将数据从我的领域加载到该单元中。我以前是在情节提要板上进行此设置的,并且工作顺利,它只能在屏幕上打印内容,因此为了打印多页,我使用的是xib文件。这就是为什么我知道我没有将数据加载到单元中的原因。出现单元格,而不是当我选择适当的行时问我要显示的数据。这是代码。

感谢一堆

科尔

override func viewDidLoad() {
            super.viewDidLoad()

  @IBOutlet var shareView: NSView!
    @IBOutlet weak var scrollView: NSScrollView!

    var printController : NSViewController?
    var slipsView: SlipsPrintView?
    var leftVC: SlipsViewController?
    var realm: Realm?
    var slipData: Results<Home>?
    var notificationToken: NotificationToken?
    var selectedDate: DateChange? {
        didSet {
            loadData()
        }
    }

这里我将用户与领域同步

            let config = SyncUser.current!.configuration(realmURL: Constants.REALM_URL, fullSynchronization: true, enableSSLValidation: true, urlPrefix: nil)
            self.realm = try! Realm(configuration: config)
            loadData()
            notificationToken = selectedDate?.selection.observe { [weak self] (changes) in
                switch changes {
                case .initial:

                    self?.slipsView?.slipsTableViewOne?.reloadData()
                case .update:

                    self?.slipsView?.slipsTableViewOne?.reloadData()
                case .error(let error):

                    let alert = NSAlert ()
                    alert.messageText = "An error Occured opening your Realm File"
                    alert.informativeText = "Please logout and log back in."
                    let result = alert.runModal()

                    switch result {
                    case NSApplication.ModalResponse.alertFirstButtonReturn:
                        print("first button")
                    default:
                        print("default")
                    }
                    fatalError("\(error)")
                }
            }

在这里设置printController

            self.printController = NSViewController.init(nibName: "SlipsPrintView", bundle: .main)
            let printView : SlipsPrintView = self.printController!.view as! SlipsPrintView
            self.shareView = printView
            printView.slipsTableViewOne?.dataSource = self
            if let docView = self.scrollView?.documentView {

                docView.addSubview(printView)

                printView.leadingAnchor.constraint(equalTo: docView.leadingAnchor, constant:self.vMargin).isActive = true
                printView.trailingAnchor.constraint(equalTo: docView.trailingAnchor, constant:-self.vMargin).isActive = true

                printView.topAnchor.constraint(equalTo: docView.topAnchor, constant:self.vMargin).isActive = true
                docView.heightAnchor.constraint(equalTo: printView.heightAnchor, constant: self.vMargin*2).isActive = true
            }
        }

// MARK:-此方法加载数据

        func loadData() {
            slipData = selectedDate?.selection.sorted(byKeyPath: "timestamp", ascending: true)
        }
        func updateView()  {
            loadData()
            viewDidLoad()
        }
    }

这里是数据源方法发生的地方。

    extension SlipsViewController: NSTableViewDataSource {
        func numberOfRows(in tableView: NSTableView) -> Int {
            return 10
        }

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

            if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "SlipsTableCellView"), owner: nil) as? SlipsPrintView {

                if row == 0 {

                    cell.firstStudentName?.stringValue = selectedDate?.selection.last?.mainString ?? ""

    }   if row == 1 {
    }
    }
     return nil
        }

0 个答案:

没有答案