Xcode 8-Swift 3 OS X-刷新自定义视图控制器

Xcode 8-Swift 3 OS X-刷新自定义视图控制器,swift,xcode,macos,swift3,xcode8,Swift,Xcode,Macos,Swift3,Xcode8,我正在Xcode 8和Swift 3中创建一个应用程序,供我的工作场所使用。我将给你们一个简短的了解,我正在做什么,我正试图做什么。因此,在我的程序中,我加载了有关计算机的数据,包括MAC地址和IP地址,我的这些数据工作正常。我的问题是,当我尝试刷新数据时,它要么崩溃,要么不重新加载任何内容 现在我已经阅读了专门说明“不要调用viewDidLoad()”的文档,但我不确定如何重新加载数据。我一直在研究这个小功能有一段时间了,但不幸的是,我还是一片空白,找不到更多的信息 基本上,我提取信息,然后将

我正在Xcode 8和Swift 3中创建一个应用程序,供我的工作场所使用。我将给你们一个简短的了解,我正在做什么,我正试图做什么。因此,在我的程序中,我加载了有关计算机的数据,包括MAC地址和IP地址,我的这些数据工作正常。我的问题是,当我尝试刷新数据时,它要么崩溃,要么不重新加载任何内容

现在我已经阅读了专门说明“不要调用viewDidLoad()”的文档,但我不确定如何重新加载数据。我一直在研究这个小功能有一段时间了,但不幸的是,我还是一片空白,找不到更多的信息

基本上,我提取信息,然后将它们写入标签,标签将数据呈现给技术人员。我曾尝试在视图控制器下使用刷新功能,以及在第一次响应下使用重新加载功能,但均无效。有人知道我可以尝试在点击按钮时重新加载数据吗

编辑2

import Cocoa
import Foundation
import NetFS

class ViewController: NSViewController {
    // Hostname outlet
    @IBOutlet weak var populateHostname: NSTextField!
    // IP Address 1 outlet
    @IBOutlet weak var populateIPAddr: NSTextField!
    @IBOutlet weak var IPAdap1: NSTextField!
    // IP Address 2 outlet
    @IBOutlet weak var populateIPAddr2: NSTextField!
    @IBOutlet weak var IPAdap2: NSTextField!
    // MAC Adress 1 outlet
    @IBOutlet weak var populateMACAddress: NSTextField!
    @IBOutlet weak var MACAdap1: NSTextField!
    // MAC Address 2 outlet
    @IBOutlet weak var populateMACAddress2: NSTextField!
    @IBOutlet weak var MACAdap2: NSTextField!
    // OS Version outlet
    @IBOutlet weak var osVersion: NSTextField!
    // Buttons
    @IBOutlet weak var editLoginConfigButton: NSButton!
    @IBAction func refresh(_ sender: AnyObject) {
        //ViewController.setNeedsDisplay
        reloadData()
    }
    @IBAction func EditLoginConfig(_ sender: AnyObject) {
        *Omitted from code - for stackoverflow*
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        loadData()
    }
    func reloadData() {
        //get adapters - includes IP, Adapter Name, and MAC Address
        let myInterfaces = getInterfaces()
        //ip address
        if (myInterfaces.count != 0) {
            populateIPAddr.stringValue = myInterfaces[0].addr
            IPAdap1.stringValue = myInterfaces[0].name
            if (myInterfaces.count != 1) {
                if (myInterfaces[0].addr != myInterfaces[1].addr) {
                    populateIPAddr2.stringValue = myInterfaces[1].addr
                    IPAdap2.stringValue = myInterfaces[1].name
                }
            } else {
                populateIPAddr2.stringValue = ""
                IPAdap2.stringValue = ""
            }
        }

        //mac address
        if (myInterfaces.count != 0) {
            populateMACAddress.stringValue = myInterfaces[0].mac
            MACAdap1.stringValue = myInterfaces[0].name
            if (myInterfaces.count != 1) {
                if (myInterfaces[0].mac != myInterfaces[1].mac) {
                    populateMACAddress2.stringValue = myInterfaces[1].mac
                    MACAdap2.stringValue = myInterfaces[1].name
                }
            } else {
                populateMACAddress2.stringValue = ""
                MACAdap2.stringValue = ""
            }
        }

    }
    func loadData() {
        //hostname
        let currentHost = Host.current().localizedName ?? ""
        populateHostname.stringValue = currentHost

        //get adapters - includes IP, Adapter Name, and MAC Address
        let myInterfaces = getInterfaces()
        //ip address
        if (myInterfaces.count != 0) {
            populateIPAddr.stringValue = myInterfaces[0].addr
            IPAdap1.stringValue = myInterfaces[0].name
            if (myInterfaces.count != 1) {
                if (myInterfaces[0].addr != myInterfaces[1].addr) {
                    populateIPAddr2.stringValue = myInterfaces[1].addr
                    IPAdap2.stringValue = myInterfaces[1].name
                }
            } else {
                populateIPAddr2.stringValue = ""
                IPAdap2.stringValue = ""
            }
        }

        //mac address
        if (myInterfaces.count != 0) {
            populateMACAddress.stringValue = myInterfaces[0].mac
            MACAdap1.stringValue = myInterfaces[0].name
            if (myInterfaces.count != 1) {
                if (myInterfaces[0].mac != myInterfaces[1].mac) {
                    populateMACAddress2.stringValue = myInterfaces[1].mac
                    MACAdap2.stringValue = myInterfaces[1].name
                }
            } else {
                populateMACAddress2.stringValue = ""
                MACAdap2.stringValue = ""
            }
        }

        //OS X Version
        let osVers = ProcessInfo.processInfo.operatingSystemVersion
        let osMajorVers = String(osVers.majorVersion)
        let osMinorVers = String(osVers.minorVersion)
        let osPatchVers = String(osVers.patchVersion)
        osVersion.stringValue = (osMajorVers + "." + osMinorVers + "." + osPatchVers)

        // Edit Users Login Config enabled/disabled
        if (NSUserName() == "Administrator" || NSUserName() == "administrator") {
            // disable button
            editLoginConfigButton.isEnabled = false
        }

    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.

        }
    }



}

因此,正如我之前所说(我相信),像这样使用它不会中断线程,但也不会刷新数据。知道它在哪里失败了吗?

不要调用viewDidLoad()绝对正确。基本上,您不能调用任何包含
did
will
should
的委托方法。通过编写自定义方法分离代码以重新加载数据,该方法可以在
viewDidLoad()
和其他任何地方调用。我遇到的问题是,它在第一个线程时崩溃。我调用view controller类中的函数(因为我需要访问textfield outlets来写入数据。知道可能发生什么吗?没有任何代码,没有。让我编辑它并添加一些代码,给我几分钟时间。谢谢!您在tableView中提供的信息是在其他任何东西中吗?