gpt4 book ai didi

iphone - NSTask waitUntilExit 在越狱 iOS 上挂起应用程序

转载 作者:行者123 更新时间:2023-12-03 16:44:27 24 4
gpt4 key购买 nike

所以我让 NSTask 运行一个脚本,该脚本生成一些内容的列表,并将其放入我读取的 txt 中。但是,如果我使用当前的代码(如下),则会在 NSTask 完成之前弹出警报,从而导致空白警报。我尝试过 waitUntilExit 但这会使调用此操作的按钮卡住,但 UI 不会自行锁定。

- (void) runSupported {
stask = [[NSTask alloc] init];
[stask setLaunchPath:@"/bin/bash"];
NSString *script;
script = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/apps.sh"];
NSArray *sargs = [NSArray arrayWithObjects:script, @"-txt", nil];
[stask setArguments: sargs];
[stask launch];

NSString *apps;
apps = [NSString stringWithContentsOfFile:@"/var/mobile/supported.txt" encoding:NSUTF8StringEncoding error:nil];
NSFileManager *fm = [NSFileManager defaultManager];
if ([fm fileExistsAtPath:apps]) {
UIAlertView *supported = [[UIAlertView alloc] initWithTitle:@"App List" message:apps delegate:self cancelButtonTitle:@"Ok!" otherButtonTitles:nil];
[supported show];
[supported release];
} else {
UIAlertView *supported = [[UIAlertView alloc] initWithTitle:@"App List" message:@"Error generating list." delegate:self cancelButtonTitle:@"Ok!" otherButtonTitles:nil];
[supported show];
[supported release];
}
}

知道如何在调用警报之前完成 NSTask 吗?谢谢。

编辑:带有 NSNotification 的代码:

-(IBAction) supported {
stask = [[NSTask alloc] init];
[stask setLaunchPath:@"/bin/bash"];
NSString *script;
script = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/apps.sh"];
NSArray *sargs = [NSArray arrayWithObjects:script, @"-txt", nil];
[stask setArguments: sargs];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(taskEnded:)
name: NSTaskDidTerminateNotification
object: nil];
[stask launch];
}

- (void)taskEnded:(NSNotification *)notification {
if (stask == [[notification object] terminationStatus]) {
NSString *apps;
apps = [NSString stringWithContentsOfFile:@"/var/mobile/supported.txt" encoding:NSUTF8StringEncoding error:nil];
NSFileManager *fm = [NSFileManager defaultManager];
if ([fm fileExistsAtPath:apps]) {
UIAlertView *supported = [[UIAlertView alloc] initWithTitle:@"Apps" message:apps delegate:self cancelButtonTitle:@"Ok!" otherButtonTitles:nil];
[supported show];
[supported release];
} else {
UIAlertView *supported = [[UIAlertView alloc] initWithTitle:@"Apps" message:@"Error generating list." delegate:self cancelButtonTitle:@"Ok!" otherButtonTitles:nil];
[supported show];
[supported release];
}
} else {
NSLog(@"Task failed.");
}
}

最佳答案

不要使用waitUntilExit

问题是如何在任务完成后执行某些操作而不阻塞 UI(或卡住该按钮)。对于所有类似的问题,解决方案是在任务完成时收到通知,并进一步继续操作(显示警报)以响应该通知。

在本例中,通知是一个名为 NSTaskDidTerminateNotification 的 NSNotification。当任务由于任何原因退出时,NSTask 对象会在默认的 NSNotificationCenter 上发布此通知。您可以询问任务的终止状态是什么,以确定它是成功、失败还是崩溃。

另请参阅:Notification Programming Topics .

关于iphone - NSTask waitUntilExit 在越狱 iOS 上挂起应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5139092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com