#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
.