NSWorkspace:runningApplications不会返回所有用户进程,除非我使用NSTimer

时间:2016-04-27 19:44:56

标签: swift macos cocoa process nsworkspace

我正在尝试使用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
    }

}

0 个答案:

没有答案