NSThread для остановки процесса

#iphone #uitableview #nsthread

#iPhone #uitableview #nsthread

Вопрос:

Я использую базовое приложение для навигации. Когда я перехожу к следующему просмотру или возвращаюсь к предыдущему просмотру, поток не останавливается. Может кто-нибудь дать мне решение для остановки потока при переключении между представлениями? Когда я переключаюсь на следующий или предыдущий, приложение выходит из строя. Я использую поток, подобный этому, для загрузки изображения

 - (void)viewWillAppear:(BOOL)animated {
    AppDeleget=  [[UIApplication sharedApplication] delegate];
    ProcessView *Process=[[ProcessView alloc] init];
    [Process SearchProperty:AppDeleget.PropertyURL page:AppDeleget.Page];
    [Process release];
    for(NSDictionary *status in AppDeleget.statuses)
    {       

        NSMutableString *pic_string = [[NSMutableString alloc] initWithFormat:@"%@",[status objectForKey:@"picture"]];  

        if([pic_string isEqualToString:@""])
        {

            [ListPhotos addObject:@"NA"];

        }
        else
        {

            NSString *str= [[[status objectForKey:@"picture"] valueForKey:@"url"] objectAtIndex:0];
            [ListPhotos addObject:str];  


        }
    }
    [NSThread detachNewThreadSelector:@selector(LoadImage) toTarget:self withObject:nil];

    [AppDeleget.MyProgressView stopAnimating];
    [AppDeleget.Progress removeFromSuperview];
    [super viewWillAppear:animated];
}
-(void)LoadImage
{
    for(int x=0;x<[ListPhotos count];x  )
    {   
        NSData *imageData =[ListPhotos objectAtIndex:x]; 
        id path = imageData;
        NSURL *url = [NSURL URLWithString:path];
        NSLog(@"%@",url);
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *img = [[UIImage alloc] initWithData:data];
        [self performSelectorOnMainThread:@selector(downloadDone:) withObject:img waitUntilDone:NO];

    }

}
-(void)downloadDone:(UIImage*)img {

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:count inSection:0];

    if(img == nil)
    {
        TableCell *cell = (TableCell *)[TableView cellForRowAtIndexPath:indexPath]; 
        cell.myImageView.image=[UIImage imageNamed:@"No_image.png"];
          count;
        [TableView reloadData]; 

    }
    else
    {
        TableCell *cell = (TableCell *)[TableView cellForRowAtIndexPath:indexPath]; 
        cell.myImageView.image=img;
          count;
        [TableView reloadData]; 
    }   

}
  

Ответ №1:

Вы можете отменить поток, который выполняется, используя метод instance cancel

 [yourThread cancel];
  

Или вы можете использовать exit

 [yourThread exit];
  

который завершит поток

Комментарии:

1. Вы имеете в виду, что управление не выводится из функции LoadImage?

2. при использовании этого в то время симулятор зависает

Ответ №2:

Вы запустили поток в viewWillAppear , следовательно, он будет вызван при переключении между вашими контроллерами просмотра. Если вы хотите выполнить свой поток только один раз, попробуйте вставить его viewDidLoad .