오케이 그래서 기본적으로 스크립트 GUI를위한 앱을 만들려고합니다. 제대로 작동하지 않는 부분은 처음에는 스크립트 출력을 표시합니다. 작업이 끝난 후에도 모든 것이 나에게 좋지 않다고 말하는 것은 불필요합니다. 지금 내가 어디 있는지는 uitextview에서 실시간으로 출력을 얻을 수 있지만 새로운 정보가 랩을 통해 전달되면 읽을 수 없게 만드는 대신 필자는 스크립트에서 apt-get update를 사용합니다. 내 코드는 다음입니다 ... 내 유일한 문제는 출력 나는 새로운 탈옥 dev에 오전 그래 난 내 응용 프로그램은 루트 권한으로 실행 한 :nstask 오류로 인한 출력 표시
#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
줄에 중단 점을 넣습니다. "data = [[notification userInfo] objectForKey : NSFileHandleNotificationDataItem];" . 디버거도 거기에 발을 내딛습니까? –