如何获取控制台日志并在textview中显示[Swift]

时间:2016-08-10 15:33:59

标签: ios swift debugging

如何获取包含所有print / Nslog内容的控制台日志并将其显示在textview上?非常感谢你的回答。

4 个答案:

答案 0 :(得分:2)

如果您不想更改现有代码,可以;

1 - 将print的输出重定向到已知文件。      看这里的说明; How to redirect the nslog output to file instead of console(回答4,重定向)

2 - 监控文件的更改并将其读入以显示在textView中。

答案 1 :(得分:1)

为此,我修改了phatblat在本文标题为“ Intercepting stdout in Swift”中描述的OutputListener类:

func captureStandardOutputAndRouteToTextView() {
    outputPipe = Pipe()

    // Intercept STDOUT with outputPipe
    dup2(self.outputPipe.fileHandleForWriting.fileDescriptor, FileHandle.standardOutput.fileDescriptor)
    
    outputPipe.fileHandleForReading.waitForDataInBackgroundAndNotify()
    
    NotificationCenter.default.addObserver(forName: NSNotification.Name.NSFileHandleDataAvailable, object: outputPipe.fileHandleForReading , queue: nil) {
      notification in
      
      let output = self.outputPipe.fileHandleForReading.availableData
      let outputString = String(data: output, encoding: String.Encoding.utf8) ?? ""
      
      DispatchQueue.main.async(execute: {
        let previousOutput = self.outputText.string
        let nextOutput = previousOutput + outputString
        self.outputText.string = nextOutput
        
        let range = NSRange(location:nextOutput.count,length:0)
        self.outputText.scrollRangeToVisible(range)
      })
      
      self.outputPipe.fileHandleForReading.waitForDataInBackgroundAndNotify()
    }
  }
}

答案 2 :(得分:0)

你做不到。

您可以使用一些记录器,允许您添加自定义日志目标。 您必须将所有打印/ NSLog调用更改为例如Log.verbose(message)

我正在使用SwiftyBeaver。它允许您定义自定义目标。您可以稍后阅读它并在某些文本字段中显示。

答案 3 :(得分:0)

你完全可以做到!看看这个:https://stackoverflow.com/a/13303081/1491675

基本上,您创建一个输出文件并将stderr输出传递给该文件。然后要在textView中显示,只需读取文件并填充textView。