Je construis une application a 4 tab
(Tabbar Controller
), et chaque onglet que j'appelle une fonction (updateArray
) après 2s. Je veux quand cliquez sur l'autre onglet, updateArray()
fonction est kill. Mon problème est quand sur tab
, updateArray()
appel après 2s
, quand je clique sur l'autre onglet, cette fonction est toujours appeler.Comment tuer NSThread en cliquant sur le nouvel onglet iOS?
C'est updateArray()
-(void)updateArray{
while (loop)
{
[NSThread sleepForTimeInterval:2.0];
[FileCompletedArray removeAllObjects];
[temp removeAllObjects];
[UserNameArray removeAllObjects];
NSURL *url1 = [NSURL URLWithString:@"server"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL: url1] ;
NSMutableURLRequest *afRequest = [httpClient requestWithMethod:@"POST" path:nil parameters:params1] ;
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success");
NSString * parsexmlinput = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"Response in Loop CompleteView: %@", parsexmlinput); //000400010001
// dispatch_async(dispatch_get_main_queue(), ^{
[self parseXMLFile:parsexmlinput];
NSLog(@"File Completed array: %@", FileCompletedArray);
NSLog(@"File Temp out array: %@", temp);
NSLog(@"File Completed count: %lu",(unsigned long)[ FileCompletedArray count]);
NSLog(@"File Temp out count: %lu", (unsigned long)[temp count]);
if([FileCompletedArray count] != [temp count])
{
temp = [FileCompletedArray mutableCopy];
NSLog(@"File Temp 1 array: %@", temp);
[_tableView reloadData];
NSLog(@"File Temp 2 array: %@", temp);
}
[alert dismissWithClickedButtonIndex:0 animated:YES];
//});
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error: %@", error);
}
];
[httpClient enqueueHTTPRequestOperation:operation];
}
}
Et dans viewWillAppear()
-(void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
loop = YES;
temp = [FileCompletedArray mutableCopy];
[self performSelectorInBackground:@selector(updateArray) withObject:nil ];
}
Dans ma fonction, je l'ai utilisé [NSThread sleepForTimeInterval:2.0];
, je ne sais pas comment tuer. Avez-vous des suggestions? Merci à l'avance
Oui, j'utilise la variable de boucle (type booléen), et le mettre au premier funtion updateArray. mais il fonctionne quand je clique sur l'autre onglet. – NGOT
Donc après '[NSThread sleepForTimeInterval: 2.0];' vous devriez ajouter 'if (! Loop) return;' – Wain
Pas besoin d'ajouter un bool; appelez 'cancel' sur l'instance' NSThread', puis quand le timer se déclenche (oui, utilisez un timer), testez '[[NSThread currentThread] isCancelled]' pour le voir si vous retournez YES. – bbum