1

さて、基本的にスクリプトのGUIであるアプリを作成しようとしていますが、正しく機能しない部分は、最初はスクリプトの出力を表示しているので、タスクが完了した後はすべてが表示されます。言うまでもなく、ダメです。私が今いるところは、uitextviewでリアルタイムに出力を取得できますが、新しい情報が何回にもわたって配信されて読めなくなっているため、この例ではスクリプトapt-getupdateを使用しています。私は新しい脱獄開発者です。はい、root権限でアプリを実行しています。唯一の問題は出力です...私のコードは次のとおりです。

#import "RootViewController.h"

@implementation RootViewController
@synthesize navItem;
- (void)loadView {
    self.view = [[[UIView alloc] initWithFrame:       [[UIScreen mainScreen] applicationFrame]]        autorelease];
    self.view.backgroundColor = [UIColor        redColor];

    navBar = [[UINavigationBar alloc] init];
    navBar.frame = CGRectMake(0, 0,         self.view.frame.size.width, 44);

    navItem = [[[UINavigationItem alloc]
    initWithTitle:@"GUI"] autorelease];
    navBar.barStyle = UIBarStyleDefault;
    navBar.items = [NSArray     arrayWithObject:navItem];
    [self.view addSubview:navBar];

    NSPipe *pipe = [NSPipe pipe];

    _fileHandle = [pipe fileHandleForReading];
    [_fileHandle readInBackgroundAndNotify];

    task = [[NSTask alloc] init];
    [task setLaunchPath:@"/usr/bin/apt-get"];
    [task setStandardOutput: pipe];
    [task setStandardError: pipe];

        NSArray *arguments;
    arguments = [NSArray arrayWithObjects:     @"update", nil];
    [task setArguments: arguments];

    [task launch];

}
-(id)init
{
    [super init];
    [[NSNotificationCenter defaultCenter]     addObserver:self
    selector:@selector( readPipe: )
      name:NSFileHandleReadCompletionNotification 
    object:nil];
    return self;
}

-(void)dealloc
{
    [[NSNotificationCenter defaultCenter]     removeObserver:self];
}

-(void)readPipe: (NSNotification *)notification
{
    NSData *data;
    NSString *text;

    if( [notification object] != _fileHandle )
        return;

    data = [[notification userInfo] objectForKey:NSFileHandleNotificationDataItem];
    text = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];


    navItem.title = text;

    titleTextField = [[UITextView alloc]   initWithFrame: CGRectMake(0, 40, 320, 350)];
    [titleTextField setBackgroundColor:[UIColor     clearColor]];
    titleTextField.text = text;
    titleTextField.editable = YES;
    titleTextField.scrollEnabled = YES;
    titleTextField.autoresizingMask =UIViewAutoresizingFlexibleHeight;
    [self.view addSubview: titleTextField];

    [text release];
    if( task )
    [_fileHandle readInBackgroundAndNotify];

}

@end
4

1 に答える 1

0

readPipeタスクからの新しい出力で が呼び出されるたびUITextViewに、同じフレームの四角形で新しい を作成します。これが、新しいテキストが以前に表示されたテキストと重なる理由です。

単一の を使用しUITextViewて常に新しいテキストを に追加readPipeするか、各テキスト ビューを別のフレームに作成する必要があります。

于 2013-01-12T20:29:40.697 に答える