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

2024-03-05

所以我让 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(或冻结该按钮)。对于所有类似的问题,解决方案是得到通知当任务完成时,并进一步继续(显示警报)以响应该通知。

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

也可以看看:通知编程主题 http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Notifications/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSTask waitUntilExit 在越狱 iOS 上挂起应用程序 的相关文章

  • iphone NSDate 转换问题

    在我的 facebook 图表 Api 中 我正在获取这些数据 来自杰森 updated time 2011 05 17T14 52 16 0000 我正在使用此代码将其转换为有效的日期格式 NSDateFormatter df NSDat
  • 应用内购买产品禁用“提交审核”

    基于此处提到的所有步骤http troybrant net blog 2010 01 in app purchases a full walkthrough http troybrant net blog 2010 01 in app pu
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • 使用 MFMailComposeViewController 类从 iPhone 应用程序发送带有 IMG 标签的 HTML 电子邮件

    我正在使用 MFMailComposeViewController 类从我的 iPhone 应用程序发送格式化的 HTML 电子邮件 我需要在电子邮件中包含图像 并且我在电子邮件正文中添加了 IMG 标签 IBAction shareWit
  • 来自 iPhone/iPad 的 json Web 服务

    有人可以帮助我解决如何从 iphone 或 ipad 使用 json Web 服务的问题吗 这里我的要求是使用 API 密钥实现 json webservice 如果可能的话发布一些教程或示例链接 谢谢 规范的 JSON 处理库是here
  • iphone:如何停止快门动画?

    我有两个问题 1 我想知道如何在相机加载时停止快门动画 我正在使用 UIImagePickerController 我已经参考了堆栈溢出的许多答案 但没有成功 2 我在相机中有一个自定义按钮 使用cameraOverlayView并想通过单
  • 在 UIImage 顶部绘制透明圆圈 - iPhone SDK

    我在尝试找出如何在 UIImageView 中的 UIImage 顶部绘制透明圆圈时遇到了很多麻烦 谷歌给了我线索 但我仍然找不到有效的例子 有没有人知道的例子可以证明这一点 最简单的方法就是创建一个半透明的方形 UIView 然后将其图层
  • 使用基于约束的布局自动调整 NSTokenField 的大小

    有没有办法自动调整大小height使用约束的 NSTokenField 保持宽度恒定 sizeToFit应该有效 但事实并非如此 如果我设置一个约束来保持宽度不变并调用此方法 它将忽略约束并仅调整宽度大小 当我想要的是仅调整高度大小时 基于
  • 苹果推送通知在生产中不起作用

    我们完全陷入困境 请帮忙 我和我的团队制作了一个 iPhone 应用程序 这是我们第一次在 iOS 上尝试 一切都很好 直到我们提交应用程序并在应用程序商店上可用为止 推送通知服务无法正常工作 我在网上搜索并尝试根据人们的建议仔细检查我们的
  • CGImage/UIImage 在 UI 线程上延迟加载会导致卡顿

    我的程序显示一个水平滚动表面 从左到右平铺有 UIImageViews 代码在 UI 线程上运行 以确保新可见的 UIImageView 分配有新加载的 UIImage 加载发生在后台线程上 一切工作几乎都很好 除了每个图像变得可见时出现口
  • 如何使 for 循环以与 NSLog(@"%@", arrData) 相同的顺序迭代

    我执行了以下代码NSLog arrData 调试器中的输出预计如下所示 0 first name John 1 first name Florence 2 first name Melinda 3 first name Zack 然后我执行
  • 如何测试 UITextField 是否为零?

    我正在尝试制作我的应用程序的一部分 如果该人不更改我的 UITextField 中的空白文本 那么他 她将无法继续下一步 基本上 我想测试 UITextField 的 nil 文本 我已经使用了 if text 方法 但是如果用户单击 UI
  • 在运行时获取 iPhone 应用程序的产品名称?

    如何才能实现这一目标 我想获取名称 以便可以在应用程序中显示它 当然 每次更改名称时不必在代码中更改它 Try this NSBundle bundle NSBundle mainBundle NSDictionary info bundl
  • 在 swrevealcontroller 之前实现登录屏幕

    我刚刚开始学习 IOS 开发 我已经按照给定的在线教程成功实现了 SWRevealViewController 一切都按预期工作 然后 我决定添加一个登录屏幕 这将是应用程序运行时用户看到的第一个页面 我采取的步骤如下 将 UIViewCo
  • 如何检查 BOOL 是否为空?

    有没有办法在将值分配给 BOOL 之前检查该值是否为 NULL Nil 例如 我在 NSDictionary 中有一个值可以是 TRUE FALSE NULL mySTUser current user following results
  • 两者都实现了类。将使用两者之一

    我有一个项目 它具有使用 SocketRocket 的依赖项 通过 CocoaPods 安装 并从 HeapAnalytics 导入了静态库 显然 HeapAnalytics 库已经使用了 SocketRocket 编译时没有出现错误 但在
  • 如何在 UICollectionView 的节标题中动态添加标签和按钮?

    请帮助我如何水平添加标签和水平添加类似的按钮 但每个按钮应像另一个部分一样在每个标签的下方对齐 这应该在 UICollectionView 的标题中动态发生 因为标签和按钮的数量根据我的数据 我想制作一种 Excel 类型的布局 并在标题中
  • ViewWillAppear 没有被 UISplitViewController 调用

    背景和目标 我有一个基于 UISplitViewController 的 iPad 应用程序 到目前为止它支持 4 个方向 但现在我想将其锁定为仅横向 我变了shouldAutorotateToInterfaceOrientation左视图
  • 私人 iPhone 应用程序?

    我有兴趣编写连接到内部网或外部网的应用程序 换句话说 我想为我的客户制作私人应用程序 但我不希望每个人都能够访问它并能够下载它 您知道是否有一种方法可以将企业应用程序仅分发给特定的人 Android 也做同样的事情吗 The iPhone
  • NSURL URLWithString:引发异常

    简而言之 NSURL URLWithString 似乎引发了一个例外 根据文档 如果字符串格式错误 则返回 nil 没有提到在任何情况下都会引发异常 除此之外 我还对 URL 进行编码并检查nil在将字符串转换为 URL 之前 任何人都可以

随机推荐