我正在尝试使用ActivityIndicator加载UIAlertView,只要点按一下按钮即可弹出。在那一刻,我需要它来运行 dpkg 命令。
我非常接近完成它。只有一个问题,当我触摸我的按钮时,当应用程序安装debian软件包时,UIAlertView不会一直加载(变暗的屏幕)。包完成安装后,UIAlertView会一直加载。然后被[alert dismissWithClickedButtonIndex:0 animated:YES];
我不确定这是否需要在另一个线程上,所以我试图这样做。不确定我是否正确设置。继承我的代码。建议?修正?
的.m
-(IBAction)installdeb:(id)sender{
UIAlertView *alerty = [[UIAlertView alloc] initWithTitle:@"Installing..." message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles: nil];
UIActivityIndicatorView *progress= [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(125, 50, 30, 30)];
progress.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
[alerty addSubview:progress];
[progress startAnimating];
[alerty show];
[alerty release];
[NSThread detachNewThreadSelector:@selector(installdeb) toTarget:self withObject:nil];
}
- (void)installdeb{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
char *installdebchar = [[NSString stringWithString:@"dpkg -i /Applications/MyApp.app/package.deb"] UTF8String];
system(installdebchar);
if (system(installdebchar) == 0){
[alerty dismissWithClickedButtonIndex:0 animated:YES];
UIImage *img1 = [UIImage imageNamed:@"whitecheckmark.png"];
[ImageView1 setImage:img1];
} else {
[alerty dismissWithClickedButtonIndex:0 animated:YES];
}
[pool release];
}
·H
@class DebInstallViewController;
@interface DebInstallViewController : UIViewController <UINavigationBarDelegate, UINavigationControllerDelegate, UIAlertViewDelegate>{
IBOutlet UIAlertView *alert;
IBOutlet UIImageView *ImageView1;
}
- (IBAction)installdeb:(id)sender;
@end
我对目标c有点新意。所以不要讨厌。 :)建议?
答案 0 :(得分:1)
看起来你采取了正确的整体方法。但是,有一些问题。 首先,目前尚不清楚'installdeb'中'alerty'的来源。我假设您打算使用成员变量'alert'?
假设是这种情况,我可以在你的代码中看到的主要低级问题是你试图在后台线程上调用dismissWithClickedButtonIndex:animated:。 Apple的文档声明所有UIKit交互必须在主线程上发生,除非另有明确说明。
确保在分配警报ivar时正确保留它。
现在,有一个高级别的问题,你正在从看起来像iOS应用程序调用系统命令......但我只是假设你知道你在那里做什么... < / p>