如何显示“正在加载 UIAlertView”用于系统命令?
我试图在点击按钮时立即弹出带有 ActivityIndicator 的 Loading UIAlertView 。就在那一刻,我需要它来运行 dpkg 命令。
我已经非常接近完成它了。只有一个问题,当我触摸按钮时,当应用程序安装 debian 软件包时,UIAlertView 不会完全加载(屏幕变暗)。包安装完成后,UIAlertView 就会一路加载一秒钟。然后用 [alertmissWithClickedButtonIndex:0animated: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 有点陌生。所以不要恨。 :) 有什么建议吗?
I'm trying to get a Loading UIAlertView with ActivityIndicator to pop up as soon as I tap a button. At that very moment I need it to run the dpkg command.
I'm very close to completing it. There's only one problem, when I touch my button, The UIAlertView doesn't load all the way (dimmed screen) while the app installs the debian package. As soon as the package is finished installing, the UIAlertView loads all the way for a second. Then is dismissed with [alert dismissWithClickedButtonIndex:0 animated:YES];
I'm not sure if this needs to be on another thread so I attempted to do so. Not sure if I set it up right. So heres my code. Suggestions? Corrections?
.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
I'm kinda new to objective c. So don't hate. :) Suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看来您采取了正确的总体方法。然而,存在一些问题。
首先,尚不清楚“installdeb”中的“警报”来自何处。我假设您打算使用成员变量“alert”?
假设是这种情况,我在您的代码中看到的主要低级问题是您尝试在后台线程上调用missWithClickedButtonIndex:animated:。 Apple 的文档规定,除非另有明确说明,否则所有 UIKit 交互都必须发生在主线程上。
确保在分配警报 ivar 时正确保留它。
现在,存在一个高级问题,即您正在从看似 iOS 应用程序调用系统命令...但我假设您知道自己在做什么...
Looks like you're taking the right overall approach. However, there are a few issues.
First, it's unclear where 'alerty' is coming from in 'installdeb'. I assume you meant to use the member variable 'alert'?
Assuming that's the case, the main low-level issue I can see with your code is that you're attempt to call dismissWithClickedButtonIndex:animated: on a background thread. Apple's docs state that all UIKit interaction must occur on the main thread, unless explicitly stated otherwise.
Make sure that when you assign the alert ivar that it gets retained properly.
Now, there are the high level issues of the fact that you're calling system commands from what looks to be an iOS app... but I'll just assume you know what you're doing there...