I want to display an alert view on pressing a button. It is displayed but it takes too much time to be displayed on screen. here is the function that I am calling on pressing the button:
-(void)saveAndClose:(id)sender
{
waitForOCR=[[UIAlertView alloc] initWithTitle:@"Processing..." message:@"Please wait." delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil, nil];
waitForOCR.delegate=self;
[waitForOCR show];
if(!isCancelled){
NSMutableArray *dateSaved=[[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] arrayForKey:@"dateCaptured"]];
NSDateFormatter *dateText=[[NSDateFormatter alloc] init];
[dateText setDateFormat:@"yyyy-MM-dd"];
NSDate *now=[NSDate date];
NSString *dateValue=[dateText stringFromDate:now];
[dateSaved addObject:dateValue];
NSMutableArray *timeSaved=[[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] arrayForKey:@"timeCaptured"]];
NSDateFormatter *timeText=[[NSDateFormatter alloc] init];
[timeText setDateFormat:@"HH:mm:ss"];
NSString *timeValue=[timeText stringFromDate:now];
[timeSaved addObject:timeValue];
[[NSUserDefaults standardUserDefaults] setObject:dateSaved forKey:@"dateCaptured"];
[[NSUserDefaults standardUserDefaults] setObject:timeSaved forKey:@"timeCaptured"];
[dateSaved release];
dateSaved=nil;
[timeSaved release];
timeSaved=nil;
int counter = [[NSUserDefaults standardUserDefaults] integerForKey:@"LaunchesCounter"];
counter++;
[[NSUserDefaults standardUserDefaults] setInteger:counter forKey:@"LaunchesCounter"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *localFilePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"image%d.png",counter]];
NSData *thedata = [[NSData alloc] initWithData:UIImagePNGRepresentation(imageToCrop)];
[thedata writeToFile:localFilePath atomically:YES];
[thedata release];
[NSThread detachNewThreadSelector:@selector(processOcrAt:) toTarget:self withObject:[self.imageCropper getCroppedImage]];
}
else{
isCancelled=FALSE;
}
}
As you can see that I am displaying UIAlerView at the start of the function. But it is taking too long to be displayed.
Any suggestion to fix this issue?
Thanks
Regards
Idrees
The alert will only show up at the end of the current run loop, so everything you do right after “showing” it, will actually happen before. Note that it would be a good idea to move that code into the background anyway, as it will otherwise block the main thread and make the app unresponsive at best.