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?
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…