iOS 程序在UITextView中显示NSLog日志的方法,

最近开发程序,需要做个给测试人员的demo,客户端可以实时 显示程序的打印日志的功能,

查找了很多的资料找到个方法,利用NSPipe即可以实现,

苹果官方解释:

objects provide an object-oriented interface for accessing pipes. An NSPipe object represents both ends of a pipe and enables communication through the pipe. A pipe is a one-way communications channel between related processes; one process writes data, while the other process reads that data. The data that passes through the pipe is buffered; the size of the buffer is determined by the underlying operating system.NSPipe is an abstract class, the public interface of a class cluster.

NSPipe是一个抽象类,一类集群的公共接口。通过NSPipe 我们可以方便的读取和写入进程数据,

如果想实现将 程序的实时日志打印,可以在控制器中添加下边方法

- (void)redirectNotificationHandle:(NSNotification *)nf{ // 通知方法
    NSData *data = [[nf userInfo] objectForKey:NSFileHandleNotificationDataItem];
    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    self.logTextView.text = [NSString stringWithFormat:@"%@\n\n%@",self.logTextView.text, str];// logTextView 就是要将日志输出的视图(UITextView)
    NSRange range;
    range.location = [self.logTextView.text length] - 1;
    range.length = 0;
    [self.logTextView scrollRangeToVisible:range];
    [[nf object] readInBackgroundAndNotify];
}

- (void)redirectSTD:(int )fd{
    NSPipe * pipe = [NSPipe pipe] ;// 初始化一个NSPipe 对象
    NSFileHandle *pipeReadHandle = [pipe fileHandleForReading] ;
    dup2([[pipe fileHandleForWriting] fileDescriptor], fd) ;

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(redirectNotificationHandle:)
                                                 name:NSFileHandleReadCompletionNotification
                                               object:pipeReadHandle]; // 注册通知
    [pipeReadHandle readInBackgroundAndNotify];
}

执行

[self redirectSTD:STDOUT_FILENO];

[self redirectSTD:STDERR_FILENO];

就可以实现输出打印,

  

时间: 2024-08-25 14:50:30

iOS 程序在UITextView中显示NSLog日志的方法,的相关文章

CUDA程序编译过程中产生警告的解决方法

有时候经常使用别人用Tabhost+其它的实现demo.单纯利用Tabhost该如何使用呢? 下面看例子: public class MainActivity extends TabActivity { public TabHost tabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 获取对象 tabHost = getTabH

在VC中显示和处理图片的方法

落鹤生 发布于 2011-10-21 09:12 点击:344次  来自:blog.csdn.net/mengaim_cn 几种用GDI画图的方法介绍. TAG: GDI   法1:这个方法其实用的是一本经典vc图像处理的书上的有关读取位图的函数库, 当没有这个函数库时,就没有太多的实用价值.这种方法直接用的是读取和显示bmp图片的函数库首先要得到要显示区域的位置:  CWnd* pWnd=GetDlgItem(IDC_BMP);  RECT rect;  pWnd->GetClientRect

iOS开发 - 在SwiftUI中显示模态视图

在SwiftUI中显示模态视图 简介 这里教大家如何弹出一个简单的模态视图.分别有两个页面,ContentView和GCPresentedView,以下对应简称为A和B.我们要做的是在A视图中点击按钮跳转到B视图,然后再从B视图点击按钮返回到A视图. 步骤 在A视图中创建按钮和模态视图代码 struct ContentView: View { @State var isPresented = false var body: some View { Button(action: { self.is

Shell 中常见的日志统计方法

前面我发布过"Hadoop兮,杀鸡别用牛刀,python+shell实现一般日志文件的查询.统计", 需要结合python, 可能还是有一定的门槛, 现将shell部分剥离出来. 举例一些最基本的日志统计方法. (1)查看文件 more crawler.log 查看crawler.log日志 tail -n 100 crawler.log 查看crawler.log的最后100行 (2)匹配统计 cat *.log | grep "ERROR" |wc -l 统计在

验证码 在resin中显示不出来解决方法 tomcat显示正常

<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %> <%! Color getRandColor(int fc,int bc){//给定范围获得随机颜色 Random random = new Random(); if(fc>255) fc=255; if(bc>255) bc=255;

VS2010运行正常的控制台程序在VS2015中出现乱码的解决方法

以前在Visual Stuido 2010中运行正常的控制台程序,在Visual Studio 2015中出现乱码,找到<Visual Studio 2015的坑:中文字符串编译后成乱码>这篇文章,原来是某个cs文件的保存格式为ANSI,在保存按钮右侧有一个编码保存,用UTF8另存后,编译运行OK!

Python的raw_input语句包含中文,在Windows环境CMD中显示乱码的解决方法

Python的raw_input语句中如果包含中文,在Windows环境CMD中执行时会显示乱码: 由于raw_input语句不支持unicode显示,在中文字符串前加u会报错: 解决办法: 在语句中进行强制的编码转换,格式如下: shuzi = raw_input (unicode('请输入日期:','utf-8').encode('gbk'))

在Centos中显示ipv4地址的方法

输入命令  ifconfig | more eth0网卡只有ipv6 修改方法如下: vi /etc/sysconfig/network-scripts/ifcfg-eth0 ONBOOT=no 改成 yes /etc/init.d/network restart 原文地址:https://www.cnblogs.com/zxq-Study-Java/p/10050861.html

**iOS开发系列--IOS程序开发概览

http://www.cnblogs.com/kenshincui/p/3890880.html 概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的知识是你日后开发IOS的基础,没有那些知识你开发IOS会很痛苦,现在很多开发人员做开发都是一知半解,程序质量确实令人担忧,所以还是希望大家能够熟练掌握前面的内容,开发过程中多思考,彻底理解程序运行的原理