Поскольку результаты проверки могут занимать более 4 секунд (в зависимости от количества прыжков), я получаю вращающееся цветовое колесо (пляжный мяч), которое обычно указывает на то, что программа заблокирована или не работает.
Приложение продолжает вращающееся цветовое колесо и заканчивается результатами в текстовом поле. Есть ли способ избавиться от «пляжного мяча»?
Я отладил, распечатав результаты для каждой переменной.
Пляжный мяч появляется после выполнения команды let handle1 = pipe.fileHandleForReading.
Я попробовал Grand Central Dispatch (GCD), но все равно получил те же результаты.
// Built using X-Code Version 8.2.1 - Swift Version 3.0.2
// Text view for results (display)
@IBOutlet weak var Results: NSTextField!
// Start button to execute ping
@IBAction func startButton(_ sender: Any)
{
cmdPing()
}
// Global variables
var myArg = ""
var shellResults = ""
func cmdPing()
{
// Step 1
myArg = "ping -c 10 www.google.com"
shellResults = getPing(shellArgs: myArg)
Results.stringValue = shellResults
// Step 2
myArg = "ping -c 10 127.0.0.1"
shellResults = getPing(shellArgs: myArg)
Results.stringValue = shellResults
}
// function that executes a shell command and returns its value (myArg)
func getPing(shellArgs: String) -> String
{
let task:Process = Process()
let pipe:Pipe = Pipe()
task.launchPath = "/bin/sh"
task.arguments = ["-c", shellArgs]
task.standardOutput = pipe
task.launch()
let handle1 = pipe.fileHandleForReading
let data1 = handle1.readDataToEndOfFile()
let result1 = NSString(data: data1, encoding: String.Encoding.utf8.rawValue)
let trimmed1 = (result1! as NSString).trimmingCharacters(in: NSCharacterSet.whitespaces)
shellResults = trimmed1
task.waitUntilExit()
return shellResults
}
Я получаю результаты в текстовом поле. Что было бы неплохо, если бы это можно было сделать, так это показывать каждую строку (прыжок) в текстовом поле во время каждого пинга без «пляжного мяча». Любая помощь будет оценена.