Xcode 8-Swift 3 OS X-刷新自定义视图控制器
我正在Xcode 8和Swift 3中创建一个应用程序,供我的工作场所使用。我将给你们一个简短的了解,我正在做什么,我正试图做什么。因此,在我的程序中,我加载了有关计算机的数据,包括MAC地址和IP地址,我的这些数据工作正常。我的问题是,当我尝试刷新数据时,它要么崩溃,要么不重新加载任何内容 现在我已经阅读了专门说明“不要调用viewDidLoad()”的文档,但我不确定如何重新加载数据。我一直在研究这个小功能有一段时间了,但不幸的是,我还是一片空白,找不到更多的信息 基本上,我提取信息,然后将它们写入标签,标签将数据呈现给技术人员。我曾尝试在视图控制器下使用刷新功能,以及在第一次响应下使用重新加载功能,但均无效。有人知道我可以尝试在点击按钮时重新加载数据吗 编辑2:Xcode 8-Swift 3 OS X-刷新自定义视图控制器,swift,xcode,macos,swift3,xcode8,Swift,Xcode,Macos,Swift3,Xcode8,我正在Xcode 8和Swift 3中创建一个应用程序,供我的工作场所使用。我将给你们一个简短的了解,我正在做什么,我正试图做什么。因此,在我的程序中,我加载了有关计算机的数据,包括MAC地址和IP地址,我的这些数据工作正常。我的问题是,当我尝试刷新数据时,它要么崩溃,要么不重新加载任何内容 现在我已经阅读了专门说明“不要调用viewDidLoad()”的文档,但我不确定如何重新加载数据。我一直在研究这个小功能有一段时间了,但不幸的是,我还是一片空白,找不到更多的信息 基本上,我提取信息,然后将
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中提供的信息是在其他任何东西中吗?