Bonjour à tous,
Je suis en train de parser un fichier xml, et comme l'éxécussion dure un certain moment, j'ai décidé d'utiliser les threads
Je lanse un thread dans la méthode viewDidLoad du rootViewController de cette maniére
et j'utilise un UIActivityIndicatorView * pour affirmer l'utilisateur que le fichier est en train d'étre parsé
Mon probléme est que je veux forcer l'attente du terminaison de ce thread pour continuer le reste de l'application
En fait mon thread parse un document xml et charge ses éléments dans un NSMutableArray et lesinsére ensuite dans une bd SQLite
puis le processus appelant qui est RootViewController se charge d'afficher les cellules du UITableView à partir du tableau qui a été déjà remplit par le thread avec le méthode
Y'a t'il une personne qui peut m'aider dans ce context et Merci beacoup
Je suis en train de parser un fichier xml, et comme l'éxécussion dure un certain moment, j'ai décidé d'utiliser les threads
Je lanse un thread dans la méthode viewDidLoad du rootViewController de cette maniére
Bloc de code:
[NSThread detachNewThreadSelector:@selector(startParsing) toTarget:self withObject:nil ]; alert = [[[UIAlertView alloc] initWithTitle:@"Parsing Elements\nPlease Wait..." message:nil delegate:self cancelButtonTitle:nil otherButtonTitles: nil] autorelease];
[alert show];
et j'utilise un UIActivityIndicatorView * pour affirmer l'utilisateur que le fichier est en train d'étre parsé
Bloc de code:
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
indicator.center = CGPointMake(alert.bounds.size.width / 2, alert.bounds.size.height - 50);
[indicator startAnimating];
[alert addSubview:indicator];
[indicator release];
Mon probléme est que je veux forcer l'attente du terminaison de ce thread pour continuer le reste de l'application
En fait mon thread parse un document xml et charge ses éléments dans un NSMutableArray et lesinsére ensuite dans une bd SQLite
Bloc de code:
-(void) startParsing{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; XMLToObjectParser *myParser = [[XMLToObjectParser alloc] parseXMLAtURL:url toObject:@"aliment" parseError:nil];
arrayCount = [[myParser items] count];
for(int i = 0; i<=arrayCount-1 ; i++) {
aliment *new = [[aliment alloc] init];
new = (aliment *)[[myParser items] objectAtIndex:i];
[tableau addObject:new];
NSLog(@"élément ajouté");
}
NSLog(@"Dans le thread '%d'",[tableau count]);
for(int i = 0; i<[tableau count] ; i++) {
aliment *new = [[aliment alloc] init];
new = (aliment *)[tableau objectAtIndex:i];
[sqlManager insertIntoDatabase:new:db];
NSLog(@"C'est inséré");
[new release];
}
[self performSelectorOnMainThread:@selector(dismissingAlertView) withObject:nil waitUntilDone:YES];
[pool release];
}
puis le processus appelant qui est RootViewController se charge d'afficher les cellules du UITableView à partir du tableau qui a été déjà remplit par le thread avec le méthode
Bloc de code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
NSString *ligneTableau = [NSString stringWithFormat:@"%@ %@", [[tableau objectAtIndex:indexPath.row] type],[[tableau objectAtIndex:indexPath.row] name]];
cell.text=ligneTableau; // Configure the cell.
return cell;
}
Y'a t'il une personne qui peut m'aider dans ce context et Merci beacoup