1

我正在尝试使用 NSWorkspace 来获取所有当前正在运行的用户应用程序/进程。当我运行下面的代码时,它只返回所有当前正在运行的用户应用程序的子集,并将它们显示在 tableView 中。然而,当我取消注释计时器行时,所有应用程序都会返回并显示在表中。我不确定为什么第一次调用 NSWorkspace.runningApplications 不会立即获取所有当前正在运行的用户应用程序?谢谢!

import Cocoa

class ViewController: NSViewController {

    // MARK: - Properties

    @IBOutlet weak var tableView: NSTableView!
    var runningApplications = [NSRunningApplication]()

    // MARK: - View Lifecycle

    override func viewDidLoad() {
        super.viewDidLoad()
        //NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: #selector(ViewController.refresh(_:)), userInfo: nil, repeats: true)
        runningApplications = NSWorkspace.sharedWorkspace().runningApplications
        print(runningApplications)
    }

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

    func refresh(timer: NSTimer){
        runningApplications = NSWorkspace.sharedWorkspace().runningApplications
        tableView.reloadData()
    }
}

// MARK: - NSTableViewDataSource

extension ViewController: NSTableViewDataSource {

    func numberOfRowsInTableView(tableView: NSTableView) -> Int {
        return runningApplications.count
    }

}

// MARK: - NSTableViewDelegate

extension ViewController: NSTableViewDelegate {

    func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView? {
        let cellView: NSTableCellView = tableView.makeViewWithIdentifier(tableColumn!.identifier, owner: self) as! NSTableCellView
        cellView.textField?.stringValue = runningApplications[row].localizedName!
        return cellView
    }

}
4

0 回答 0